Jenkins 管道构建步骤 - getBuildVariables() 返回空映射

Jos*_*att 6 jenkins jenkins-pipeline

我在测试 Jenkinsfile 中有以下代码:

node {
    stage 'Build'
    def job1 = build 'Sample_Freestyle'

    def dur = job1.getDuration()
    println dur

    def vars = job1.getBuildVariables()
    println vars

    def myMap = [k1:'v1', k2:'v2', k3:'v3']
    println myMap
}
Run Code Online (Sandbox Code Playgroud)

据我了解,当我使用构建步骤时,会返回一个 RunWrapper 对象。我正在尝试获取名为“Sample_Freestyle”的测试作业的构建变量,它现在运行一个简单的 Windows 批处理命令:

echo "Hello World"
Run Code Online (Sandbox Code Playgroud)

每当我运行它时,它都会正确执行,但是我留下了一张空地图。我测试了 getDuration() 方法并按预期返回。我在这里查看了 RunWrapper 类,可能是 env 为空(大约第 212 行),但这只是一个假设。

有谁知道为什么我在调用 getBuildVariables() 时会得到一张空地图?我是否以错误的方式解决这个问题?

小智 5

如果有人在声明性管道中寻找解决方案。我想获取下游作业环境变量(多分支声明性管道)我的下游作业设置了一个环境变量作为其构建的一部分。

所以我在上游这样做:

//downstream job kickoff
def buildResult = build job: "<downstreamjob>"
//downstream sets a new env variable env.PACKAGE_NAME
def packageName = buildResult.buildVariables.PACKAGE_NAME
Run Code Online (Sandbox Code Playgroud)


Jos*_*att 2

getBuildVariables() 返回作业的用户定义参数,而不是作业的环境变量,例如 WORKSPACE 或 BUILD_TAG。

根据Vitalii的评论,我做了一个实验,并向Sample_Freestyle作业添加了一个参数。当我添加测试字符串参数时,地图不再是空的!我有:

{TEST_PARAMETER=Test Parameter}
Run Code Online (Sandbox Code Playgroud)

我建议将方法名称从 getBuildVariables() 更改为 getJobParameters ( ) 或 getBuildParameters ( ) 以保持命名一致。

  • 这是不正确的,如果您尝试从下游作业获取环境变量,这是一个非常令人困惑的答案。https://javadoc.jenkins.io/plugin/workflow-support/org/jenkinsci/plugins/workflow/support/steps/build/RunWrapper.html#getBuildVariables - 您也无法使用“params.TEST_PARAM”更改参数在构建期间。 (2认同)