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

Jenkins:多分支流水线disableConcurrentBuilds不生效,需单次仅执行一个构建

解决多分支流水线全局单构建限制的方案

我来帮你搞定这个多分支流水线的并发控制问题!首先得明确:你当前配置里的disableConcurrentBuilds()只能限制单个分支自己不能同时跑多个构建,但多分支项目里不同分支是独立的作业,所以它管不了跨分支的并发——这就是问题的核心所在!结合你说的「代理还有其他作业在不同工作区运行,不能设单执行器」的前提,给你推荐两个靠谱的方案:

方案一:用Throttle Concurrent Builds插件全局限制

你已经在使用这个插件了,只要稍微调整配置就能实现全局单构建:

  1. 全局配置类别:
    进入Jenkins的「全局配置」,找到「Throttle Concurrent Builds」板块,添加一个新的类别(比如叫MultiBranchGlobalLock),把「Maximum concurrent builds for this category」设为1。

  2. 修改流水线脚本:
    在你的properties里更新ThrottleJobProperty的配置,指定刚才创建的类别,让整个多分支项目的所有分支都归到这个类别下受限制:

    properties([
        disableConcurrentBuilds(), // 先保证单个分支自身不并发
        gitLabConnection('Gitlab'),
        [$class: 'RebuildSettings', autoRebuild: false, rebuildDisabled: true],
        [$class: 'JobRestrictionProperty'],
        [$class: 'ThrottleJobProperty', 
         categories: ['MultiBranchGlobalLock'], // 绑定全局限制类别
         limitOneJobWithMatchingParams: false, 
         maxConcurrentPerNode: 0, // 0表示使用全局配置的数值
         maxConcurrentTotal: 0,
         throttleEnabled: true,
         throttleOption: 'category'] // 指定按类别限流
    ])
    

方案二:用Lockable Resources插件实现全局锁

这个插件的逻辑更直观:创建一个全局的「锁资源」,所有分支的构建都必须先拿到这个锁才能运行,没拿到的就排队等待。

  1. 安装并配置锁资源:

    • 先在Jenkins插件市场安装「Lockable Resources Plugin」
    • 进入「全局配置」,找到「Lockable Resources」板块,添加一个新资源(比如叫SingleMultiBranchBuildLock),把「Quantity」设为1(表示同一时间只能有一个构建使用这个锁)
  2. 修改流水线脚本:
    用lock块把你的整个构建逻辑包裹起来,确保只有拿到锁的构建才能执行:

    properties([
        gitLabConnection('Gitlab'),
        [$class: 'RebuildSettings', autoRebuild: false, rebuildDisabled: true],
        [$class: 'JobRestrictionProperty']
    ])
    
    // 全局锁:所有分支的构建都必须先拿到这个锁才能继续
    lock(resource: 'SingleMultiBranchBuildLock', inversePrecedence: false) {
        stage('Checkout') {
            checkout scm
        }
        stage('Build') {
            sh 'mvn clean package' // 替换成你的构建命令
        }
        // 后续的测试、部署等阶段都要放在lock块里
    }
    

注意事项

  • 方案一的Throttle插件适合已经在使用它的场景,配置起来无缝衔接;
  • 方案二的Lockable Resources更灵活,你还可以给不同的多分支项目设置不同的锁,互不干扰;
  • 不管用哪个方案,都要确保所有关键构建步骤都被限制逻辑覆盖,避免出现部分步骤不受控的情况;
  • 如果构建被中止或失败,插件都会自动释放锁/限流配额,不用担心死锁问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:42:02