管道作业 - 上游传递参数?

时间:2017-01-06 19:38:50

标签: jenkins groovy jenkins-pipeline

TL; DR:显然,在Jenkins管道作业中,您可以轻松地向下游传递参数。我想知道的是,如果你可以通过上游

用例:

我们有三份工作; job_onejob_twojob_three。这些通常是单独运行的,因为只需要一个阶段,但在越来越频繁的情况下,我们希望能够连续运行所有三个阶段。

第一个和第二个依赖于您可以提前定义的参数,但第三个需要一个从第二个作业生成的参数(在job_two运行之前其结构未知的文件名)。

我已经构建了umbrella,它为每个作业调用如下内容。在这种情况下,填充PARAM1因为伞运行为"使用参数构建"。

build job: 'job_one', parameters: [[$class: 'StringParameterValue', name: 'PARAM1', value: "$PARAM1"]]

所有罚款和花花公子,我可以在PARAM1中使用job_one就好了。

问题:

对于job_three,我需要参数filename。这是在job_two内生成的,因此我无法访问,因为job_three不知道job_two正在做什么。

在一个理想的世界中,我只需将job_two传递给filename到伞形工作,这将把它反馈给job_three。因此,如何将生成的filename传递回伞形工作?

我想象一下这样的最终剧本;

node('on-demand-t2small'){

    stage ('Build 1') {

        build job: 'job_one', parameters: [[$class: 'StringParameterValue', name: 'PARAM1', value: "$PARMA1"]]
}
    stage ('Build 2') {

        build job: 'job_two', parameters: [[$class: 'StringParameterValue', name: 'PARAM2', value: "$PARMA2"]]

    //somehow get the filename parameter out of job_two here so that I can move it to job three...
} 
    stage ('Build 3') {

        build job: 'job_three', parameters: [[$class: 'StringParameterValue', name: 'filename', value: "$filename"]]
} }

附加说明:

我认识到第一个问题将是"为什么不让job_two触发job_three?我无法通过这种方式设置系统,原因有两个:

  1. job_two需要能够在不触发job_three的情况下运行,并且三个人不能总是需要输入两个输入。
  2. 我辩论过伞开了两个,然后有一个两个条款,如果它是由雨伞启动的话,只会触发三个,但据我所知,这将限制伞工作的反馈;你不会知道两个是否失败,因为两个失败,或因为三个(作为两个的一部分)失败。如果我对这个假设有误,请告诉我。
  3. 我曾考虑将参数设置为环境变量,但我相信这是特定于节点的,我无法保证两个作业都在同一节点上运行,因此似乎不是解决方案。

    Umbrella是一个用groovy编写的管道工作,其他三个可能是管道或自由式工作,如果这很重要。

    我希望在可能的情况下获得详细的答案,我还是Groovy,Jenkins和编码的新手。

1 个答案:

答案 0 :(得分:3)

应该如此简单:

stage ('Build 3') {
        res = build job: 'job_three', parameters: [[$class: 'StringParameterValue', name: 'filename', value: "$filename"]]
        echo "$res.buildVariables.filename"
}

假设在job_three中你做了

env.filename = "col new file name"