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

如何以编程方式检查Jenkins多分支流水线扫描是否完成?

解决多分支流水线扫描无法使用wait参数的问题

直接触发多分支流水线项目(如some-multi-branch-pipeline)时,wait: true参数不生效并报错ERROR: Waiting for non-job items is not supported,这是因为多分支流水线本身是项目容器,触发它实际是执行分支扫描动作,而非具体的可等待Job任务。以下是两种编程式检查扫描完成的方法:

方法一:循环检查扫描状态

通过Jenkins内部API获取多分支项目的扫描状态,循环等待直到扫描结束:

// 获取目标多分支流水线项目
def multibranchJob = Jenkins.instance.getItemByFullName("some-multi-branch-pipeline")
// 触发分支扫描
multibranchJob.scheduleBuild2(0)

// 循环检查扫描是否在运行
def isScanning = true
while (isScanning) {
    sleep(10) // 每10秒检查一次,可根据需求调整间隔
    isScanning = multibranchJob.getIndexing().isRunning()
}

方法二:利用Future对象阻塞等待

scheduleBuild2方法会返回一个Future对象,调用其get()方法可直接阻塞当前流水线,直到扫描任务完成:

def multibranchJob = Jenkins.instance.getItemByFullName("some-multi-branch-pipeline")
// 添加触发原因(可选)
def triggerCause = new hudson.model.Cause.UserIdCause()
// 触发扫描并获取Future对象
def scanFuture = multibranchJob.scheduleBuild2(0, triggerCause)

// 阻塞等待扫描完成
scanFuture.get()

注意事项

  • 确保流水线脚本拥有足够权限:在Jenkins全局安全配置中,需允许脚本访问Jenkins实例(若开启了脚本安全沙箱,可能需要将相关API加入审批签名)
  • 两种方法均能精准响应扫描完成事件,避免固定sleep的时间浪费或等待不足的问题

内容的提问来源于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.19 16:40:00