groovy 如何从sh脚本内部分配jenkins全局环境变量

pgvzfuti  于 2022-11-01  发布在  Jenkins
关注(0)|答案(1)|浏览(219)

我已经分配了一个jenkins全局环境变量,是否可以从sh”””“”脚本内部覆盖它?

pipeline {
    environment {
        MYIMAGE=""
    }
    stages {
        stage('CREATE IMAGE'){
            steps {
                script {
                    if ((BRANCH_NAME == "DEV" )) {
                        script {
                               sh """  
                               if [[ $BRANCH_NAME == "dev" ]]; then
                                   env.MYIMAGE="image1";
                               elif [[ $BRANCH_NAME == "TESTING" ]]; then
                                   env.MYIMAGE="image2";
                               else
                                   env.MYIMAGE="image3";
                               fi
                               echo ${env.MYIMAGE}
                               """
                            }
                        }
                    }
                }
            }
        }
    }

所以我想从脚本内部有条件地设置环境变量,这可能吗?

5jvtdoz2

5jvtdoz21#

我想没有办法照你说的去做。
首先,Jenkins管道全局env允许您插入新环境,但覆盖现有环境。
其次,sh步骤不能在Bash中计算Groovy表达式。
如果您接受使用通用的Groovy变量,但环境中您可以执行以下操作:

// declare MYIMAGE to be a global variable of your pipeline
// then you can access it anywhere in your pipeline

// Don't define MYIMAGE in environment{}
def MYIMAGE = "<you can put default value here or give empty value>"

pipeline {
   stages {
     stage {
        script {
          def cmd = '''
             if [[ $BRANCH_NAME == "dev" ]]; then
                IMAGE="image1"
             elif [[ $BRANCH_NAME == "TESTING" ]]; then
                IMAGE="image2"
             ...
             fi
             echo ${IMAGE}
          '''
          MYIMAGE = sh(returnStdout: true, script: cmd).trim()
        }
     }
   }
}

相关问题