【问题标题】:Dynamic variable in Jenkins pipeline with groovy method variableJenkins管道中的动态变量与groovy方法变量
【发布时间】:2017-11-14 17:18:50
【问题描述】:

我在 Groovy 中有一个用于声明性管道的 Jenkinsfile,并创建了两个名为 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 变量值,只是作为字符串传递的那个,我的意思是,结果是:

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

【问题讨论】:

  • 能否展示调用该方法的代码?
  • 使用代码@RobHales 编辑
  • 您的代码是错误的,因为它定义了一个简单的字符串 OCP_TOKEN_VALUE_ONE,它是变量的名称而不是它的值!
  • @yorammi 但正如我所说,这个字符串是 Jenkins 变量的名称,该变量在另一个阶段的 openshift 插件中被正确评估: openshiftBuild apiURL: "${OCP_URL}", authToken: "$ {openShiftTokenByGroup}", namespace: "${projectProps.namespace}-dev" 我认为问题出在 sh 命令的东西上
  • 好的。您是否尝试使用 ' 而不是 """ 来包装 sh 命令?根据我的经验,它在某些情况下的行为会有所不同。

标签: jenkins groovy jenkins-pipeline


【解决方案1】:

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

【讨论】:

  • 它可以从从 json 读取的 var 进行评估吗? config = readJSON(file: 'config.json') config.RHEL6_SOURCE_IMAGE_FAMILY
  • 嗨@dcalap...你能帮我解决我的问题吗? stackoverflow.com/questions/63467568/…
  • @dcalap 我已经尝试过您的解决方案,但它不起作用,因为它正在寻找通过另一个变量提到的变量值,在称为脚本 1 的管道的新部分
猜你喜欢
  • 2017-04-07
  • 1970-01-01
  • 1970-01-01
  • 2017-08-09
  • 1970-01-01
  • 1970-01-01
  • 2017-03-30
  • 2017-04-16
  • 1970-01-01
相关资源
最近更新 更多