如何在Jenkins的声明性管道上的Powershell脚本中获取更新的环境变量值

时间:2019-04-01 17:28:13

标签: powershell jenkins jenkins-pipeline jenkins-declarative-pipeline

我正在编写一个Jenkins声明性管道脚本,其中包含Powershell脚本。当我尝试在Powershell中获取环境变量的值时,我得到的是environment块中定义的“原始”值,而不是前一个阶段中设置的值。 withEnv块也不起作用。示例:

pipeline { 
    agent any 
    environment { TEST_ENV_VAR = "0" }
    stages {
        stage('stage1') { 
            failFast true
            parallel {
                stage('stage1.1') {
                    steps {
                        script {
                            TEST_ENV_VAR = "1"
                        }
                    }
                }
            }
        }
        stage('stage2') {
            failFast true
            parallel {
                stage('stage2.1') {
                    steps {
                        echo "$TEST_ENV_VAR" // prints "1"
                        withEnv(["inv_var = $TEST_ENV_VAR"]) {
                            withCredentials([usernamePassword(credentialsId: "$CredentialsID", passwordVariable: 'password', usernameVariable: 'srvUser')]) {
                                echo "$TEST_ENV_VAR" // prints "1"
                                echo "$env.inv_var" // prints "null"
                                powershell label: 'pshell', returnStatus: true, script: '''
                                    echo "$env:TEST_ENV_VAR"  # prints "0"                                  
                                    echo "$env:inv_var" # prints nothing
                                '''
                            }
                        }
                    }
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

这是一个非常简单的答案,但令人难过的是,俗套并没有多大帮助。在withEnv内,变量和等号之间不能有空格。这是删除了凭据的代码(因为我没有凭据),唯一的变化是删除了两个空格

pipeline { 
    agent any 
    environment { TEST_ENV_VAR = "0" }
    stages {
        stage('stage1') { 
            failFast true
            parallel {
                stage('stage1.1') {
                    steps {
                        script {
                            TEST_ENV_VAR = "1"
                        }
                    }
                }
            }
        }
        stage('stage2') {
            failFast true
            parallel {
                stage('stage2.1') {
                    steps {
                        echo "$TEST_ENV_VAR" // prints "1"
                        withEnv(["inv_var=$TEST_ENV_VAR"]) {

                                echo "$TEST_ENV_VAR" // prints "1"
                                echo "$env.inv_var" // now prints "1"
                                powershell label: 'pshell', returnStatus: true, script: '''
                                    echo "$env:TEST_ENV_VAR"  # prints "0"                                  
                                    echo "$env:inv_var" # now prints "1"
                                '''

                        }
                    }
                }
            }
        }
    }
}