在 Jenkinsfile 中使用带有身份验证的私有 docker 注册表
Use private docker registry with Authentication in Jenkinsfile
如何教我的 Jenkisfile 在此设置中通过基本身份验证登录?
我正在为我的 Jenkins 构建使用自定义 docker 图像。
如文档 here 中所述,我定义了一个 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()
}
}
}
如果我使用以下代理设置:
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'
}
}
管道执行失败,出现以下异常:
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'){
^
问题是使用的注册表需要基本的身份验证登录。注册表在使用 this 配置的 nginx 反向代理后面运行。
如 Using a custom registry 中所述,您可以指定凭据和注册表 url 以这样使用:
docker.withRegistry('https://registry.az1', 'credentials-id') {
...
}
您需要创建一个 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'
}
}
如何教我的 Jenkisfile 在此设置中通过基本身份验证登录?
我正在为我的 Jenkins 构建使用自定义 docker 图像。 如文档 here 中所述,我定义了一个 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()
}
}
}
如果我使用以下代理设置:
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'
}
}
管道执行失败,出现以下异常:
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'){
^
问题是使用的注册表需要基本的身份验证登录。注册表在使用 this 配置的 nginx 反向代理后面运行。
如 Using a custom registry 中所述,您可以指定凭据和注册表 url 以这样使用:
docker.withRegistry('https://registry.az1', 'credentials-id') {
...
}
您需要创建一个 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'
}
}