Jenkins如何获取多级下游任务的构建信息
Jenkins跨多级下游任务获取构建信息的实现方案
以下为三种可落地的实现方案,可根据实际业务场景选择:
方案1:Job B同步阻塞触发Job C(优先推荐,实现成本最低)
- 修改Job B中触发Job C的逻辑,使用Jenkins内置
build步骤,开启阻塞等待Job C执行完成配置,Job C运行结束后直接通过返回的构建对象拉取所有需要的信息,包括构建号、运行状态、构建URL、构建参数、日志片段等。 - Job A的构建信息可由A触发B时作为入参传递给B,Job B自身的构建信息可直接调用内置变量
currentBuild获取,三类信息收集完成后,在Job B的后置步骤直接调用邮件插件完成发送即可。
Pipeline示例代码片段:
// Job B Pipeline中触发Job C的逻辑 def jobCBuild = build job: 'Job C', wait: true, propagate: false // 拉取Job C的构建信息 def jobCInfo = [ status: jobCBuild.getResult(), buildNumber: jobCBuild.getNumber(), url: jobCBuild.getAbsoluteUrl(), duration: jobCBuild.getDurationString() ]
方案2:参数透传+后置回调(适用于Job C运行时间较长的场景)
- Job A触发Job B时,将自身构建号、状态、URL等信息作为参数传入Job B;Job B触发Job C时,将Job A、Job B的所有构建信息全部作为参数透传给Job C。
- 若允许在Job C侧发邮件,直接在Job C的后置步骤整合三类信息发送即可;若要求必须由Job B发邮件,可在Job C执行完成后调用Jenkins API回调Job B的通知接口,将自身构建信息回传给B,由B完成邮件发送。
方案3:构建记录匹配查询(适用于无法修改Job C配置的场景)
- Job B触发Job C后,记录触发的时间戳,通过轮询Jenkins API的方式查询Job C的构建记录,筛选出触发时间晚于触发时间、且上游触发者为当前Job B构建实例的记录,匹配成功后即可拉取到对应的Job C构建信息。
核心查询逻辑代码示例:
import jenkins.model.Jenkins import hudson.model.Cause def triggerTime = currentBuild.startTimeInMillis def jobC = Jenkins.instance.getItemByFullName('你的Job C完整路径') def targetCBuild = jobC.builds.find { build -> build.getTimeInMillis() > triggerTime && build.getCause(Cause.UpstreamCause.class)?.upstreamBuild == currentBuild.number }
注意:使用方案3时需要确保Job B同一时间不会触发多次Job C,避免出现匹配冲突。
内容的提问来源于stack exchange,提问作者simplicitydex
相关产品推荐
相关产品推荐

