首页 > 解决方案 > 在脚本化管道中使用 shell 脚本设置 env 变量的值

问题描述

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

标签: bashjenkinsenvironment-variablesjenkins-pipeline

解决方案


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

您需要将更改向上传达给您的父母,也许通过使用

echo $MY_VAR

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


推荐阅读