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

如何限制Jenkins多分支流水线的并发构建数量

Jenkins多分支流水线并发构建限制方案

你使用的properties([disableConcurrentBuilds()])仅能禁止单分支内部的并发构建,无法限制跨分支的总并发数,且你当前的资源锁逻辑是在构建启动后才执行,因此会出现构建先占用执行器、再等待锁释放的问题,可通过以下两种方案解决:

方案1:使用Throttle Concurrent Builds插件实现精准限流

  • 先安装Jenkins官方插件「Throttle Concurrent Builds」
  • 在Jenkinsfile的pipeline块之外添加限流配置,该配置会在任务进入调度队列时就做并发校验,未达并发上限才会分配执行器,从根源避免占用执行器空等的问题:
properties([
  throttleJobProperty(
    // 自定义资源分类名,所有共享同一套测试资源的任务配置相同分类即可
    categories: ['unit-test-resource-pool'],
    throttleEnabled: true,
    throttleOption: 'category',
    // 单节点并发数,0代表不限制
    maxConcurrentPerNode: 0,
    // 全局最大并发数,按需调整为你需要的数值
    maxConcurrentTotal: 3
  )
])
  • 若需要针对不同分支设置不同的并发规则,可增加分支判断逻辑:
// 仅限制主干分支的并发数,特性分支可正常并行
if (env.BRANCH_NAME ==~ /(master|main|develop)/) {
  properties([
    throttleJobProperty(
      categories: ['main-branch-test'],
      throttleEnabled: true,
      throttleOption: 'category',
      maxConcurrentTotal: 2
    )
  ])
}

方案2:调整Lockable Resources插件锁的配置(无需额外安装插件)

如果你当前已经在使用Lockable Resources插件做资源控制,可将锁逻辑移到pipeline的options块中,调度阶段就会先抢锁,没拿到锁不会分配执行器:

pipeline {
  agent any
  options {
    // 提前声明需要抢占的全局测试资源锁
    lock(resource: 'unit-test-global-lock', quantity: 1)
  }
  stages {
    stage('单元测试') {
      steps {
        // 原有单元测试逻辑
      }
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:54:00