在Jenkinsfile中使用私有docker注册表和Authentication

Rob*_*ner 16 jenkins docker docker-registry jenkins-pipeline

如何教我的Jenkisfile在此设置中通过基本身份验证登录?

我正在为我的Jenkins构建使用自定义docker镜像.正如在这里的文档中所描述的那样,我定义了一个这样的docker代理:

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()
    }
}
Run Code Online (Sandbox Code Playgroud)

}

如果我使用以下代理设置:

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'
    }
}
Run Code Online (Sandbox Code Playgroud)

管道的执行失败,出现以下异常:

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'){
                  ^
Run Code Online (Sandbox Code Playgroud)

问题是使用的注册表需要基本的身份验证登录.注册表使用配置在nginx反向代理后面运行.

yam*_*enk 31

使用自定义注册表中所述,您可以指定要使用的凭据和注册表URL:

docker.withRegistry('https://registry.az1', 'credentials-id') {
    ...
}
Run Code Online (Sandbox Code Playgroud)

您需要创建一个Jenkins凭证对象,该对象将包含存储库的凭据,并为其指定要替换的名称credentials-id.

更新:

对于声明性管道,语法如下:

agent { 
    docker {
        image 'registry.az1:5043/maven-proto'
        registryUrl 'https://registry.az1'
        registryCredentialsId 'credentials-id'
        args '-v /var/jenkins_home/.m2:/root/.m2'
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这适用于声明性管道.Docker管道文档(https://jenkins.io/doc/book/pipeline/docker/)或代理文档(https://jenkins.io)下的docker部分中缺少有关指定`registryUrl`和`registryCredentialsId`的信息./DOC /电子书/管道/语法/#剂).你是怎么找到他们的?通过原来的吉拉?https://issues.jenkins-ci.org/browse/JENKINS-39684 (7认同)
  • 从来没有设法让它发挥作用。选择在“配置系统”-->“管道模型定义”部分-->“Docker 注册表 URL”和“注册表凭据”参数中添加注册表。 (3认同)