Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Use private docker registry with Authentication in Jenkinsfile

How can I teach my Jenkisfile to login via basic auth in this setup?

I'm using a custom docker image for my Jenkins build. As described in the documentation here I defined a docker agent like so:

pipeline { agent {      docker {         image 'registry.az1:5043/maven-proto'         registryUrl 'https://registry.az1'         args '-v /var/jenkins_home/.m2:/root/.m2'     } } options {     timeout(time: 1, unit: 'HOURS')     buildDiscarder(logRotator(numToKeepStr:'10')) }  stages {     stage ('Build') {         steps{             sh ...         }     }      stage ('Test') {         steps {             sh ...         }     }        stage ('Deploy') {         steps {             sh ...         }     } }  post {     always {         echo 'Clean up workspace'         deleteDir()     } } 

}

If I use the following agent setup:

pipeline { agent {      docker.withRegistry('https://registry.az1', 'registry_login'){         image 'registry.az1:5043/maven-proto'         registryUrl 'https://registry.az1'         args '-v /var/jenkins_home/.m2:/root/.m2'     } } 

The execution of the pipeline fails with the following exception:

WorkflowScript: 3: Too many arguments for map key "withRegistry" @ line 3, column 16.        docker.withRegistry('https://registry.az1', 'registry_login'){               ^  WorkflowScript: 3: Invalid agent type "withRegistry" specified. Must be one of [docker, dockerfile, label, any, none] @ line 3, column 16.            docker.withRegistry('https://registry.az1', 'registry_login'){                   ^ 

The problem is that the used registry requires a basic auth login. The registry runs behind a nginx reverse proxy using this configuration.

like image 876
Robin Finkbeiner Avatar asked Feb 28 '18 12:02

Robin Finkbeiner


People also ask

How do I add Docker Hub credentials in Jenkins?

Manage Jenkins → Manage Plugins In Jenkins you have to add a new credential with your Docker Hub account details. Go to Credentials → Global → Add credentials and fill out the form with your username and password. Create your Jenkins pipeline.


1 Answers

As specified in Using a custom registry, you can specify the credentials and registry url to use as such:

docker.withRegistry('https://registry.az1', 'credentials-id') {     ... } 

You need to create a Jenkins credentials object which will contain the credentials for the repository and give it a name to replace credentials-id above.

Update:

For declarative pipelines, the syntax is as such:

agent {      docker {         image 'registry.az1:5043/maven-proto'         registryUrl 'https://registry.az1'         registryCredentialsId 'credentials-id'         args '-v /var/jenkins_home/.m2:/root/.m2'     } } 
like image 128
yamenk Avatar answered Sep 20 '22 14:09

yamenk