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
相关产品推荐
相关产品推荐

