小编典典

Jenkins声明式管道中的条件环境变量

jenkins

我正在尝试获得一个如下所示的声明性管道:

pipeline {
    environment {
        ENV1 = 'default'
        ENV2 = 'default also'
    }
}

问题是,我希望能够基于任意条件覆盖ENV1或ENV2的值。我目前的需求只是将其作为分支机构的基础,但我可以想象更复杂的情况。

有没有理智的方法来实现这一目标?我在网上看到了一些类似的示例:

stages {
    stage('Set environment') {
        steps {
            script {
                ENV1 = 'new1'
            }
        }
    }
}

但是我相信这并没有设置实际的环境变量,而是设置了一个局部变量,该局部变量将覆盖以后对ENV1的调用。问题是,我需要由nodejs脚本读取这些环境变量,而这些则需要是真实的机器环境变量。

有什么方法可以在jenkinsfile中将环境变量设置为动态的?


阅读 292

收藏
2020-07-25

共1个答案

小编典典

用于withEnv动态设置环境变量以用于管道的特定部分(例如,在运行节点脚本时)。像这样(用您的节点脚本替换sh步骤的内容):

pipeline {
    agent { label 'docker' }
    environment {
        ENV1 = 'default'
    }
    stages {
        stage('Set environment') {
            steps {
                sh "echo $ENV1" // prints default
                // override with hardcoded value
                withEnv(['ENV1=newvalue']) {
                    sh "echo $ENV1" // prints newvalue
                }
                // override with variable
                script {
                    def newEnv1 = 'new1'
                    withEnv(['ENV1=' + newEnv1]) {
                        sh "echo $ENV1" // prints new1
                    }
                }
            }
        }
    }
}
2020-07-25