我在Groovy中有一个Jenkins文件用于声明性管道,两个创建名为OCP_TOKEN_VALUE_ONE和OCP_TOKEN_VALUE_TWO的Jenkins变量以及相应的值。当我尝试传递方法变量并在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变量值,只是作为String传递的值,我的意思是,结果是:
- 标记= 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)
}
}
答案 0 :(得分:0)
我有两种不同的方法可以做到这一点。一个是使用来自groovy的evaluate
,如下所示:
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配置的值。