我有一个脚本管道,其中一个阶段需要根据shell脚本的输出设置当前构建的结果。不幸的是,使用shell脚本设置值似乎不会更改使用withEnv
创建的变量的值。
有人能在下面的简化代码段中找出错误吗(如果有的话)或提出其他解决方案?
stage('MyStage') {
withEnv(["MY_VAR=null"]) {
if (env.someCondition1 || env.someCondition2) {
sh '''#!/bin/bash
echo $MY_VAR # null
export MY_VAR="UNSTABLE"
printenv | grep MY_VAR # MY_VAR="UNSTABLE"
'''
}
echo env.MY_VAR // null
currentBuild.result = env.MY_VAR
echo currentBuild.result // FAILURE
}
}
答案 0 :(得分:1)
子进程退出时,子进程的环境将丢失。因此,一旦您的孩子完成MY_VAR
,您对孩子sh
所做的更改就会丢失。
您可能需要向上更改与您的父母沟通,也许可以通过
echo $MY_VAR
并在父级中捕获该输出。或者,将值写入文件并在父级中读取它们。