jenkins - Jenkins 管道中的动态变量与 groovy 方法变量

标签 jenkins groovy jenkins-pipeline

我在 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/

相关文章:

jenkins - 从Gradle运行任务通知Jenkins有关TestNG测试失败的信息,以将构建标记为“失败”

xml - 如何使用 Groovy MarkupBuilder 插入 xml 注释?

jenkins - 如何在 jenkins 中使用 gradle 编译 @Library @NonCPS

jenkins - 在 Groovy 中使用分隔符拆分字符串并避免 IndexOutOfBoundsException

jenkins - 不同 jenkins 管道插件之间的区别

Jenkins多分支管道: clean workspace/delete directory when build ends

java - 如何在 MarkupBuilder 中使用 Groovy 将日期字符串转换为日历日期?

jenkins - 如何让 xunit 在失败时停止 Jenkins 管道?

python - 将 python 脚本的输出获取到 Jenkinsfile 中的变量中

jenkins - Jenkins 字符串参数中的空格分隔字符串参数