在Jenkins管道中的Shell executor内更改Groovy变量

我有一个Jenkins管道作业,我将一些构建变量作为输入,如果用户未传递变量,我将执行脚本并获取这些变量的值。稍后,我必须使用这些变量的值来触发其他作业。

所以我的代码看起来像这样:

node {

withCredentials([[$class: 'StringBinding', credentialsId: 'DOCKER_HOST', variable: 'DOCKER_HOST']]) {

env.T_RELEASE_VERSION = T_RELEASE_VERSION

env.C_RELEASE_VERSION = C_RELEASE_VERSION

env.N_RELEASE_VERSION = N_RELEASE_VERSION

env.F_RELEASE_VERSION = F_RELEASE_VERSION

....

stage concurrency: 1, name: 'consul-get-version'

sh '''

if [ -z ${T_RELEASE_VERSION} ]

then

export T_RELEASE_VERSION=$(ruby common/consul/services_prod_version.rb prod_t_release_version)

aws ecr get-login --region us-east-1

aws ecr list-images --repository-name t-server | grep ${T_RELEASE_VERSION}

else

aws ecr get-login --region us-east-1

aws ecr list-images --repository-name t-server | grep ${T_RELEASE_VERSION}

fi

.......

't-integ-pipeline' : {

build job: 't-integ-pipeline', parameters: [[$class: 'StringParameterValue', name: 'RELEASE_VERSION', value: T_RELEASE_VERSION],

[$class: 'BooleanParameterValue', name: 'FASTFORWARD_TO_DEPLOY', value: true]]

},

......

问题是当我用空T_RELEASE_VERSION触发主作业时,子构建作业t-integ-pipeline用RELEASE_VERSION参数的空值触发。

如何更改shell执行器中的groovy参数,然后使用修改后的值在groovy执行器中再次访问它?

回答:

使用env-inject时,可以将值存储在属性文件中,并将它们作为环境变量注入。在管道中找不到任何简便的方法。

无论如何,这是一个解决方案,将值存储到文件中,然后从管道中读取文件。然后使用eval或类似方法将其转换为可分析的对象(哈希)。

Eval.me示例:将groovy映射序列化为带引号的字符串

写入/读取到文件示例:https :

//wilsonmar.github.io/jenkins2-pipeline/

编辑Manish解决方案以提高可读性:

sh 'ruby common/consul/services_prod_version.rb prod_n_release_version > status' 

N_RELEASE_VERSION_NEW = readFile('status').trim()

sh 'ruby common/consul/services_prod_version.rb prod_q_release_version > status'

Q_RELEASE_VERSION_NEW = readFile('status').trim()

以上是 在Jenkins管道中的Shell executor内更改Groovy变量 的全部内容, 来源链接: utcz.com/qa/401225.html

回到顶部