如何有条件地在环境指令中传递凭据绑定
How to pass credential binding in environment directive conditionally
这行不通:
environment {
Pass = "${blah == 'yes' ? credentials('somecred') : credentials('otherCred')}"
我可以直接将 env var 设置为 credentials()
,但是当尝试像上面那样在字符串插值器内部使用三元语句时,它不会传递实际的信用,它会传递一个字符串化的对象。
是否有在环境{}指令中执行此操作的一行代码?
Jenkins 允许您将字符串插值器潜入环境块中以评估代码,是否有另一个 Groovy 我可以在这里使用的构造会起作用?
jenkins 管道 dsl 让我哭泣
# Define outside of pipeline block
def MYENV_VAR = somevar == 'yes' ? 'cred-id-1' : 'cred-id-2'
pipeline {
agent any
environment {
MYENV = credentials("${MYENV_VAR}")
如果您想根据条件使用不同的凭据,可以使用以下示例来完成:
stage ("Example") {
steps {
script {
if ( params.TEST_PARAMETER == "test_value1" ) {
withCredentials([string(credentialsId: env.CREDENTIALS_1, variable: 'SOME_VARIABLE')]) {
yourFunction()
}
}
else {
withCredentials([string(credentialsId: env.CREDENTIALS_2, variable: 'SOME_VARIABLE')]) {
yourFunction()
}
}
}
}
}
您需要在 jenkinsfile 的末尾定义 yourFunction
。在这种情况下,当作业中的 TEST_PARAMETER
为 test_value1
时,将使用 Jenkins 凭据列表中的 CREDENTIALS_1
。当 TEST_PARAMETER
不同时,将使用 CREDENTIALS_2
凭据。通过将其修改为 case 循环,您可以有更多选择。
虽然不是 one-liner。
希望这对您有所帮助。
这行不通:
environment {
Pass = "${blah == 'yes' ? credentials('somecred') : credentials('otherCred')}"
我可以直接将 env var 设置为 credentials()
,但是当尝试像上面那样在字符串插值器内部使用三元语句时,它不会传递实际的信用,它会传递一个字符串化的对象。
是否有在环境{}指令中执行此操作的一行代码?
Jenkins 允许您将字符串插值器潜入环境块中以评估代码,是否有另一个 Groovy 我可以在这里使用的构造会起作用?
jenkins 管道 dsl 让我哭泣
# Define outside of pipeline block
def MYENV_VAR = somevar == 'yes' ? 'cred-id-1' : 'cred-id-2'
pipeline {
agent any
environment {
MYENV = credentials("${MYENV_VAR}")
如果您想根据条件使用不同的凭据,可以使用以下示例来完成:
stage ("Example") {
steps {
script {
if ( params.TEST_PARAMETER == "test_value1" ) {
withCredentials([string(credentialsId: env.CREDENTIALS_1, variable: 'SOME_VARIABLE')]) {
yourFunction()
}
}
else {
withCredentials([string(credentialsId: env.CREDENTIALS_2, variable: 'SOME_VARIABLE')]) {
yourFunction()
}
}
}
}
}
您需要在 jenkinsfile 的末尾定义 yourFunction
。在这种情况下,当作业中的 TEST_PARAMETER
为 test_value1
时,将使用 Jenkins 凭据列表中的 CREDENTIALS_1
。当 TEST_PARAMETER
不同时,将使用 CREDENTIALS_2
凭据。通过将其修改为 case 循环,您可以有更多选择。
虽然不是 one-liner。
希望这对您有所帮助。