You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在声明式Pipeline中获取被调用任务的构建状态?currentBuild.Currentresult始终返回success

获取Jenkins声明式Pipeline中被调用Job的构建状态

问题描述

你的Pipeline代码片段如下:

script{ 
    build job : 'somejob', parameters: [ extendedChoice(name: 'some_choice', value: "${env.some_choice}") ], propagate: false 
}
echo "${currentBuild.Currentresult}"

执行后发现${currentBuild.Currentresult}始终返回success,但你实际想获取的是被调用的somejob的构建状态,对吧?

问题原因

  1. propagate: false的影响:当设置propagate: false时,即使被调用的somejob构建失败,当前Pipeline Job也不会被标记为失败,所以currentBuild.currentResult(注意你这里写的Currentresult大小写错误,Jenkins变量是严格大小写敏感的)只会反映当前Job的状态,自然一直是SUCCESS。
  2. currentBuild的作用范围:currentBuild对象代表的是当前正在执行的Pipeline Job的构建信息,和被调用的子Job完全是两个独立的构建实例。

解决方案

要获取被调用Job的构建状态,你需要捕获build步骤的返回值——这个返回值是一个RunWrapper对象,包含了子Job的所有构建详情,其中就包括我们需要的构建结果。

修改后的代码示例:

script{ 
    // 将build步骤的返回结果赋值给变量,保存子Job的构建实例
    def childBuild = build(job : 'somejob', 
                          parameters: [extendedChoice(name: 'some_choice', value: "${env.some_choice}")], 
                          propagate: false)
    // 从子Job实例中提取构建状态
    def childJobResult = childBuild.result
    echo "被调用的somejob构建状态: ${childJobResult}"
    
    // 可选:如果需要让当前Pipeline的状态和子Job保持一致
    if (childJobResult in ['FAILURE', 'UNSTABLE']) {
        currentBuild.result = childJobResult
    }
}
// 现在如果上面更新了currentBuild.result,这里就能正确显示对应状态
echo "当前Pipeline构建状态: ${currentBuild.currentResult}"

关键细节补充

  • RunWrapper对象的更多属性:除了result,你还能通过这个对象获取子Job的其他信息,比如childBuild.number(构建编号)、childBuild.url(构建页面URL)等。
  • 大小写问题:一定要注意currentBuild.currentResult的正确写法,你之前的Currentresult会导致无法正确获取值,甚至返回null。
  • propagate参数的选择:如果设置propagate: true,子Job失败时当前Pipeline会直接抛出异常终止;而你用了false,就需要手动判断子Job状态并做相应处理。

内容的提问来源于stack exchange,提问作者Siri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:08:05