小编典典

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

jenkins

TL; DR:显然,在Jenkins管道作业中,您可以轻松地向下游传递参数。我想知道的是,是否可以将它们传递给 上游

用例:

我们有三份工作;job_onejob_twojob_three。它们通常仅需要一个阶段就可以单独运行,但是在越来越频繁的情况下,我们希望能够将所有三个阶段背靠背运行。

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

我建立了umbrella,每个工作都需要类似以下内容的东西。在这种情况下,PARAM1将填充,因为伞以“带参数的构建”形式运行。

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

一切都很好,然后我就可以使用PARAM1job_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的情况下运行,并且3并不一定总是需要2的输入才能运行。
  2. 我辩论过要让伞从两个开始,然后有两个从句,只有在伞开始的情况下才触发三个子句,但据我所知,这将限制伞工作中的反馈。您不会知道两个失败是因为两个失败还是三个(作为两个部分的一部分)失败了。如果我对此假设有误,请告诉我。

我曾考虑过将参数设置为环境变量,但我认为这是特定于节点的,因此我不能保证两个作业都将在同一节点上运行,因此这似乎不是解决方案。

伞是一种用groovy编写的管道作业,如果重要的话,其他三个可能是管道作业或自由式作业。

在可能的情况下,我希望您能获得详细的答案,但对于Groovy,Jenkins和一般的编码人员,我仍然是新手。


阅读 283

收藏
2020-07-25

共1个答案

小编典典

它应该像这样简单:

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"
2020-07-25