Jenkins管道中的动态变量,带有groovy方法变量

时间:2017-11-14 17:18:51

标签: jenkins groovy jenkins-pipeline

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

问题是,方法deployToOpenShiftopenshiftNamespaceGroupToken变量中有一个值,该值是在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)
  }
}

1 个答案:

答案 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配置的值。