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

时间:2017-08-30 21:44:21

标签: 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
}

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

echo "Hello World"

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

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

2 个答案:

答案 0 :(得分:0)

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

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

{TEST_PARAMETER=Test Parameter}

我建议将方法名称从getBuildVariables()更改为getJob 参数()或getBuild 参数()以获得一致的命名。

答案 1 :(得分:0)

万一有人在声明式管道中寻找解决方案。 我想获取下游作业环境变量(多分支声明式管道) 我的下游作业将环境变量作为其构建的一部分。

所以这是我的上游工作:

//downstream job kickoff
def buildResult = build job: "<downstreamjob>"
//downstream sets a new env variable env.PACKAGE_NAME
def packageName = buildResult.buildVariables.PACKAGE_NAME