我在 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}"""
}
工作完美,但不是动态的,这是方法变量的要点。我已经尝试过“””的东西,如你所见,但不起作用。
还有什么额外的想法吗?
Edited以及调用该方法的代码:
...
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)
}
}