Configure SBT credentials on Cloudbees platform to publish artifacts
When you want to deploy your Scala artifacts (or anything else) with SBT, its reference documentation explains well how to configure your own repository's credentials.
Great, just create a bunch of *.sbt
file in ~/.sbt
folder. Easy, simple.
But wait, I'm trying to publish artifacts from a Cloudbees Jenkins instance. How can I copy my *.sbt
files into `~/.sbt``on Cloudbees Jenkins platform? You can't.
On Cloudbees, all files handled by Jenkins come from either your SCM (GIT, SVN, ...) or from your private repository: /private/<my_account>/
(you can upload files in thanks to WebDAV).
As I want to load credentials in SBT, that is to say secret passwords, I want to the 2nd source.
Note: yes, I could have setup the following configuration in my build:
credentials += Credentials(file("/private/<my_account>/.credentials"))
But, you should avoid it for the next reasons:
- your build is now platform-dependent
- as this is a project's configuration, you have to duplicate it in all of your project
So it's much better to use *.sbt
files to configure global credentials, but how to do it on Cloudbees ?
Create and upload your *.sbt
file your private folder
I have chosen to copy all my *.sbt
files into /private/<my_account>/.sbt
folder.
Create a new shell script
Create this new shell script /private/<my_account>/bin/sbt-setup.sh
with the following content:
#!/bin/sh
mkdir -p ~/.sbt
for f in /private/<my_account>/.sbt/*.sbt
do
ln -s $f ~/.sbt/
done
```
This script will create a symbolic link in `~/.sbt/` for each files found in `/private/<my_account>/.sbt`.
This will work regardless of the Jenkins slave selected by the master.
## Add a new Jenkins Job to excute the shell script
Before a SBT build which requires credentials (eg. for `publish` task), create a new Jenkins job :
```sh
/bin/sh /private/<my_account>/bin/sbt-setup.sh
Save and run your job.
Voilà, that's all folks!