gpt4 book ai didi

docker - 如何根据 Jenkins 声明性管道中的参数使用不同的私有(private) docker 代理?

转载 作者:行者123 更新时间:2023-12-02 18:20:06 24 4
gpt4 key购买 nike

我正在尝试根据 Jenkins 管道中的参数从私有(private)容器注册表中选择不同的 docker 代理。对于我的示例,假设我在凭据存储中保存了“credsProd”和“credsTest”。我的尝试如下:

pipeline {
parameters {
choice(
name: 'registrySelection',
choices: ['TEST', 'PROD'],
description: 'Is this a deployment to STAGING or PRODUCTION environment?'
)
}
environment {
URL_VAR = "${env.registrySelection == "PROD" ? "urlProd.azure.io" : "urlTest.azure.io"}"
CREDS_VAR = "${env.registrySelection == "PROD" ? "credsProd" : "credsTest"}"
}
agent {
docker {
image "${env.URL_VAR}/image:tag"
registryUrl "https://${env.URL_VAR}"
registryCredentialsId "${env.CREDS_VAR}"
}
}
stages{
stage('test'){
steps{
echo "${env.URL_VAR}"
echo "${env.CREDS_VAR}"
}
}
}
}

我得到错误:来自守护进程的错误响应:获取 https://null/v2/: dial tcp: lookup null on

如果我对 registryUrl 进行硬编码,我会遇到与 registryCredentialsId 类似的问题:

agent {
docker {
image "${env.URL_VAR}/image:tag"
registryUrl "https://urlTest.azure.io"
registryCredentialsId "${env.CREDS_VAR}"
}
}

错误:找不到匹配 null 的凭据

如果我对 registryUrl 和 registryCredentialsId 都进行硬编码,则成功。

agent {
docker {
image "${env.URL_VAR}/image:tag"
registryUrl "https://urlTest.azure.io"
registryCredentialsId "credsTest"
}
}

看起来 agent{docker{}} 的 docker 登录阶段无法访问/解析环境变量。

有没有不涉及代码重复的解决方法?我使用多分支管道管理更改,因此理想情况下不希望在同一文件中有单独的 Prod 和测试 groovy 文件或不同的连续步骤集。

最佳答案

尝试在声明之前运行脚本管道:

URL_VAR = null
CREDS_VAR = null

node('master') {
stage('Choose') {
URL_VAR = params.registrySelection == "PROD" ? "urlProd.azure.io" : "urlTest.azure.io"
CREDS_VAR = params.registrySelection == "PROD" ? "credsProd" : "credsTest"
}
}


pipeline {
agent {
docker {
image "${URL_VAR}/image:tag"
registryUrl "https://${URL_VAR}"
registryCredentialsId "${CREDS_VAR}"
}
}
...

或者,您可以定义两个阶段(使用硬编码的 url 和 creds),但只运行其中一个,在两个阶段都使用 when

关于docker - 如何根据 Jenkins 声明性管道中的参数使用不同的私有(private) docker 代理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55267427/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com