In case you need to marry SBT + Artifactory with Jenkins Pipelines – and like me, you don’t want to post the Artifactory Credentials in a public accessible place on the Jenkins Agent, here comes your solution!
First, create a secret containing the username + token/password of the user that should be used by jenkins. In my case, this secret is called acme-jenkins-artifactory-access-token
Then, during your pipeline, get the secret in an environment variable and during the build, post it in a credentials.sbt
in the current working directory. This way, sbt will pick up your credentials and uses them to authenticate against your Artifactory to resolve artifacts.
pipeline { | |
environment { | |
ARTIFACTORY_ACCESS_TOKEN = credentials('acme-jenkins-artifactory-access-token') | |
} | |
stages { | |
stage('Compile & test & stage') { | |
steps { | |
script { | |
sh "echo 'credentials += Credentials(\"Artifactory Realm\", \"artifactory.power.inet\", \"${ARTIFACTORY_ACCESS_TOKEN_USR}\", \"${ARTIFACTORY_ACCESS_TOKEN_PSW}\")' > credentials.sbt" | |
} | |
script { | |
sh "sbt ';compile;test:compile;docker:stage;'" | |
} | |
…. |
Alternatively you could also create a “secret file” which already has the contents I’m here creating during the build and then just copy that to the current working dir. As I don’t want to create yet another secret containing the same credentials, I’ve chosen this approach.