在脚本化管道中使用Shell脚本设置env变量的值

时间:2018-10-11 10:10:26

标签: bash jenkins environment-variables jenkins-pipeline

我有一个脚本管道,其中一个阶段需要根据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
    }
}

1 个答案:

答案 0 :(得分:1)

子进程退出时,子进程的环境将丢失。因此,一旦您的孩子完成MY_VAR,您对孩子sh所做的更改就会丢失。

您可能需要向上更改与您的父母沟通,也许可以通过

echo $MY_VAR

并在父级中捕获该输出。或者,将值写入文件并在父级中读取它们。