TL; DR:显然,在Jenkins管道作业中,您可以轻松地向下游传递参数。我想知道的是,如果你可以通过上游。
我们有三份工作; job_one
,job_two
和job_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?我无法通过这种方式设置系统,原因有两个:
我曾考虑将参数设置为环境变量,但我相信这是特定于节点的,我无法保证两个作业都在同一节点上运行,因此似乎不是解决方案。
Umbrella是一个用groovy编写的管道工作,其他三个可能是管道或自由式工作,如果这很重要。
我希望在可能的情况下获得详细的答案,我还是Groovy,Jenkins和编码的新手。
答案 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"