Ale*_*lex 5 groovy jenkins jenkins-pipeline
TL; DR:显然,在Jenkins管道作业中,您可以轻松地向下游传递参数.我想知道的是你是否可以将它们传递到上游.
我们有三份工作; job_one,job_two和job_three.这些通常是单独运行的,因为只需要一个阶段,但在越来越频繁的情况下,我们希望能够连续运行所有三个阶段.
第一个和第二个依赖于您可以提前定义的参数,但第三个需要从第二个作业生成的参数(在job_two运行之前其结构未知的文件名).
我已经建立了umbrella,每个工作都会调用以下内容.在这种情况下,PARAM1填充是因为伞运行为"使用参数构建".
build job: 'job_one', parameters: [[$class: 'StringParameterValue', name: 'PARAM1', value: "$PARAM1"]]
Run Code Online (Sandbox Code Playgroud)
所有罚款和花花公子,然后我就可以用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"]]
} }
Run Code Online (Sandbox Code Playgroud)
我认识到第一个问题是"为什么没有工作?两个触发job_three?我不能以这种方式设置系统有两个原因;
我曾考虑将参数设置为环境变量,但我认为这是特定于节点的,我不能保证两个作业都将在同一节点上运行,因此似乎不是解决方案.
Umbrella是一个用groovy编写的管道工作,其他三个可能是管道或自由式工作,如果这很重要.
我会尽可能地欣赏详细的答案,我还是Groovy,Jenkins和编码的新手.
应该就是这么简单:
stage ('Build 3') {
res = build job: 'job_three', parameters: [[$class: 'StringParameterValue', name: 'filename', value: "$filename"]]
echo "$res.buildVariables.filename"
}
Run Code Online (Sandbox Code Playgroud)
假设在 job_three 你做
env.filename = "col new file name"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4855 次 |
| 最近记录: |