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

Jenkins流水线中如何获取作业触发链中的初始上游作业?

获取Jenkins触发链中的初始上游作业

要在JobC中拿到触发链的源头JobA,你需要递归遍历整个上游触发链,直到找不到更上游的作业为止——直接获取只能拿到直接上游,所以得循环/递归追查每一层的上游构建。

下面是可直接使用的代码实现:

def getRootUpstreamJob(build) {
    def cause = build.getCause(Cause.UpstreamCause)
    if (!cause) {
        // 没有上游触发原因,当前作业就是初始作业
        return build.getProject().getName()
    }
    // 获取上游作业的对应构建
    def upstreamJob = Jenkins.instance.getItemByFullName(cause.getUpstreamProject())
    def upstreamBuild = upstreamJob.getBuildByNumber(cause.getUpstreamBuild())
    // 递归追查上游
    return getRootUpstreamJob(upstreamBuild)
}

// 在JobC中调用该方法
def rootJob = getRootUpstreamJob(currentBuild.rawBuild)
println "初始上游作业: ${rootJob}"

代码说明

  • 定义递归方法getRootUpstreamJob,接收构建对象作为参数
  • 先检查当前构建是否有UpstreamCause:
    • 如果没有,说明当前就是触发链的源头,返回当前作业名称
    • 如果有,就根据上游项目名和构建号拿到对应的上游构建,再递归调用方法继续追查
  • 最终返回的就是触发链最开始的作业(比如JobC调用后会返回JobA)

注意:确保Jenkins脚本权限允许访问Jenkins.instance和相关构建对象,避免权限报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 04:22:02