我在 Groovy 中有一个用于声明性管道的 Jenkinsfile 和两个创建的 Jenkins 变量,名称为 OCP_TOKEN_VALUE_ONE 和 OCP_TOKEN_VALUE_TWO 以及相应的值。当我尝试传递方法变量并在 sh 命令中使用它时,问题就出现了。
我有下一个代码:
private def deployToOpenShift(projectProps, environment, openshiftNamespaceGroupToken) {
sh """/opt/ose/oc login ${OCP_URL} --token=${openshiftNamespaceGroupToken} --namespace=${projectProps.namespace}-${environment}"""
}
问题是,方法
deployToOpenShift
已在 openshiftNamespaceGroupToken
变量,一个值是在 Jenkins 中设置的变量的名称。它需要是动态的,问题是 Jenkins 不解析 Jenkins 变量值,只是作为字符串传递的,我的意思是,结果是:--token=OCP_TOKEN_VALUE_ONE
如果我输入代码
private def deployToOpenShift(projectProps, environment, openshiftNamespaceGroupToken) {
sh """/opt/ose/oc login ${OCP_URL} --token=${OCP_TOKEN_VALUE_ONE} --namespace=${projectProps.namespace}-${environment}"""
}
工作完美,但不是动态的,这是方法变量的重点。正如你所看到的,我已经尝试过使用 """的东西,但没有用。
有什么额外的想法吗?
已编辑 使用调用该方法的代码:
...
projectProps = readProperties file: './gradle.properties'
openShiftTokenByGroup = 'OCP_TOKEN_' + projectProps.namespace.toUpperCase()
...
stage ('Deploy-Dev') {
agent any
steps {
milestone ordinal : 10, label: "Deploy-Dev Milestone"
deployToOpenShift(projectProps, 'dev', openShiftTokenByGroup)
}
}
最佳答案
我有两种不同的方法来做到这一点。一种是使用 evaluate
从 groovy 这样的:
def openShiftTokenByGroup = 'OCP_TOKEN_' + projectProps.namespace.toUpperCase()
evaluate("${openShiftTokenByGroup}") //This will resolve the configured value in Jenkins
第二个是相同的方法,但在 sh 命令中使用
eval
转义 $ 字符:sh """
eval \$$openShiftTokenByGroup
echo "Token: $openShiftTokenByGroup
"""
这也将发挥作用,您将获得 Jenkins 配置的值。
关于jenkins - Jenkins 管道中的动态变量与 groovy 方法变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47291698/