Jenkins中disableConcurrentBuilds仅单构建排队:如何实现多构建依次执行?
Jenkins流水线多构建排队解决方案
问题原因
你当前使用的disableConcurrentBuilds()默认行为是:当新构建触发时,若已有正在运行的构建,会自动丢弃之前的排队任务,仅保留最新的一个待执行任务。这就是连续触发10个构建时,只有第2个进入队列,其余被跳过的原因。
解决方案
方案一:调整disableConcurrentBuilds参数(无需额外插件)
如果你的Jenkins版本支持,可通过设置abortPrevious: false,让新构建触发时不取消已有的排队任务,所有构建都会进入队列等待执行:
pipeline { agent any options { disableConcurrentBuilds(abortPrevious: false) } // 后续构建步骤 }
方案二:使用Lockable Resources插件(兼容所有Jenkins版本)
该方法更可靠,适用于所有版本的Jenkins,步骤如下:
- 在Jenkins插件管理中搜索并安装
Lockable Resources插件 - 进入Jenkins全局配置,找到「Lockable Resources」配置项,添加一个专属锁资源(例如命名为
my-exclusive-pipeline-lock) - 修改流水线配置,为需要独占执行的部分添加锁:
pipeline { agent any stages { stage('独占执行阶段') { options { // inversePrecedence设为false,保证先触发的构建先执行 lock(resource: 'my-exclusive-pipeline-lock', inversePrecedence: false) } steps { // 你的构建、测试等步骤 } } } }
若要让整个流水线都独占执行,也可将锁直接放在pipeline块下:
pipeline { agent any lock(resource: 'my-exclusive-pipeline-lock', inversePrecedence: false) stages { // 所有阶段都会等待锁释放后依次执行 } }
采用该方案后,所有触发的该流水线构建都会进入队列,按照触发顺序依次执行,不会被丢弃。
内容的提问来源于stack exchange,提问作者Sven van den Boogaart
相关产品推荐
相关产品推荐

