如何阅读詹金斯旧版本注入的环境变量

问题描述

我正在尝试使用groovy脚本读取旧的jenkins构建环境变量(以提取下游作业)。 我目前正在使用

build.getEnvVars()

但已过时警告。 有人可以告诉我什么是读取这些旧的构建环境变量的最佳方法吗?

解决方法

使用管道,这是一种从下游传播所有环境变量的方法,因此您可以使用getBuildVariables()方法,包括在下游作业中调用makeEnvAvailable之前所做的任何编辑。

注意:需要method org.jenkinsci.plugins.workflow.support.actions.EnvironmentAction getEnvironment

的脚本批准
// Downstream job 'down' Jenkinsfile
@NonCPS
def makeEnvAvailable() {
    // Goes through every environment variable and sets it again
    // This will populate 'downstreamBuild.getBuildVariables()'
    env.getEnvironment().each { k,v -> env.setProperty(k,v)  }
}

pipeline {
    agent any
    parameters {
        booleanParam(name: 'QUICK_BUILD',defaultValue: false,description: 'Skip running git clean and perform a quick build' )
    }
    environment {
        TEST_VER="${TEST_VER}"
        VIVARIUM="/tools/pancake"
    }
    stages {
        stage("Env set") {
            steps { 
                script {
                    // Will be visible upstream regardless
                    env.THIS_IS_A_TEST = "test_env_set"

                    // Not set on env. Not available
                    ANOTHER_TEST = "not_env_set"

                    // Does not modify the param or env. Not available
                    QUICK_BUILD = "not_actually_modifying_params"

                    // Set to the same value,but now available upstream
                    env.GIT_COMMIT = env.GIT_COMMIT

                    // Makes every other environment variable available
                    makeEnvAvailable()
                }
            }
        }
    }
}

// Upstream job 'Up' Jenkinsfile
pipeline {
    agent any
    stages {
        stage ("Downstream") {
            steps {
                script {
                    def down = build job: "down"
                    echo down.getBuildVariables().toString()
                    echo down.buildVariables
                }
            }
        }
    }
}

您的上游作业现在应该可以访问下游作业中的每个环境变量。

,

这是根据javadoc所需的。 https://javadoc.jenkins-ci.org/hudson/model/Run.html#getEnvVars--

def listener = Jenkins.get()
    .getItemByFullName(env.JOB_NAME)
    .getBuildByNumber(Integer.parseInt(env.BUILD_NUMBER))
    .getListener()

build.getEnvironment(listener)