Jenkins 管道中的动态变量与 Groovy 方法变量

2024-05-12

我在 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)
  }
}

我有两种不同的方法来做到这一点。一种正在使用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 配置的值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jenkins 管道中的动态变量与 Groovy 方法变量 的相关文章

随机推荐