这不起作用:
environment {
Pass = "${blah == 'yes' ? credentials('somecred') : credentials('otherCred')}"
我可以直接将env var设置为credentials()但是当尝试在字符串插值器内部使用三元语句时,它不会传递实际的信用,它会传递一个字符串化的对象。
在environement {}指令中是否有单行代码?
Jenkins允许你将字符串插值器隐藏到环境块中以评估代码,我可以在这里使用另一种groovy构造吗?
答案 0 :(得分:2)
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}")
答案 1 :(得分:-1)
如果您要根据条件使用其他凭据,可以使用以下示例进行操作:
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循环,您可以有更多选择。
虽然不是单线的。
希望这会有所帮助。