【问题标题】:Setting value of the env variable with a shell script in a scripted pipeline在脚本化管道中使用 shell 脚本设置 env 变量的值
【发布时间】:2019-03-16 09:13:06
【问题描述】:

我有一个 脚本化 管道,其中一个阶段我需要根据 shell 脚本的输出设置当前构建的结果。不幸的是,使用 shell 脚本设置值并不会改变使用withEnv 创建的变量的值。

是否有人能够在下面的简化 sn-p 中指出错误(如果有)或提出其他解决方案?

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
    }
}

【问题讨论】:

    标签: bash jenkins environment-variables jenkins-pipeline


    【解决方案1】:

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

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

    echo $MY_VAR
    

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

    【讨论】:

    • echo $MY_VAR 不会向上传达更改。将值保存到文件中确实是一种可能的解决方案,但我希望 jenkins 能以某种方式传回共享环境变量的值
    • 这就是我在第二部分中所说的,并在父级中捕获该输出 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 2017-09-24
    • 2022-09-27
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多