如何将Jenkins中job2的执行结果传递给job1并同步失败状态?
问题描述
我有一个Jenkins Job1,用于触发Job2,原触发代码如下:
stage("trigger job2") { steps { build job: job2, parameters: [ string(name: "test1", value: "test1"), string(name: "test2", value: "test2"), ], } }
现在需要实现:当Job2的最后一个阶段("RESULT"阶段)失败(标红)时,将该结果传递给Job1,让Job1中触发Job2的阶段也显示为失败(标红)。Jenkins版本为2.346.1,尝试过多种方法均无效,之前尝试的代码如下:
尝试过的方法1
def p = build job: job2, propagate: true, parameters: [ string(name: "test1", value: "test1"), string(name: "test2", value: "test2"), ], script { build.waitForCompletion() } if (p.result == 'FAILURE') { currentBuild.result = "FAILURE" error 'Job2 failed, marking Job1 as failed in the current stage' } }
尝试过的方法2
def result = build.waitForCompletion() if (result.result == 'FAILURE') { currentBuild.result = "FAILURE" error 'Job2 failed, marking Job1 as failed in the current stage' }
解决方案
默认build步骤仅返回Job的整体构建结果,而你需要检查Job2特定阶段的状态。可通过以下逻辑实现需求:
方案1:直接获取触发的Job2构建实例
stage("trigger job2") { steps { script { // 触发Job2,propagate设为false避免Job1被Job2整体结果直接终止 def job2Build = build job: 'job2', propagate: false, parameters: [ string(name: "test1", value: "test1"), string(name: "test2", value: "test2"), ] // 等待Job2构建完成 job2Build.waitForCompletion() // 定位Job2的"RESULT"阶段 def resultStage = job2Build.getExecution().getStages().find { stage -> stage.getName() == 'RESULT' } // 检查阶段状态,若失败则标记Job1当前阶段为失败 if (resultStage && resultStage.getStatus().toString() == 'FAILED') { currentBuild.result = 'FAILURE' error 'Job2的RESULT阶段失败,标记Job1当前阶段为失败' } } } }
方案2:通过Jenkins实例获取Job2最新构建(适配权限限制场景)
如果方案1中getExecution()方法触发权限问题,可改用此方式:
stage("trigger job2") { steps { script { // 触发Job2 build job: 'job2', propagate: false, parameters: [ string(name: "test1", value: "test1"), string(name: "test2", value: "test2"), ] // 获取Job2的最新构建实例 def job2 = Jenkins.instance.getItemByFullName('job2') def job2Build = job2.getLastBuild() job2Build.waitForCompletion() // 查找目标阶段 def resultStage = job2Build.getStages().find { it.name == 'RESULT' } // 判断阶段状态并处理 if (resultStage && resultStage.status == 'FAILED') { currentBuild.result = 'FAILURE' error 'Job2的RESULT阶段失败,Job1当前阶段标记为失败' } } } }
关键说明
propagate: false:确保Job1不会因Job2的整体结果直接终止,保留后续阶段检查的逻辑执行机会。- 阶段状态判断:阶段状态枚举值为
FAILED/SUCCESS等,需通过字符串形式比对。 - 权限注意:使用
Jenkins.instance需要确保Job1拥有脚本审批权限,若遇权限报错,需在Jenkins「脚本审批」页面通过对应方法的调用权限。
内容的提问来源于stack exchange,提问作者0xGJx0
相关产品推荐
相关产品推荐

