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

如何配置Jenkins:限制同Pipeline队列构建数与避免重复构建模块

需求1:限制同一Pipeline队列中最多1个构建任务

不用依赖节点级节流,直接通过Throttle Concurrent Builds插件的Job级配置即可实现:

  • 打开目标Pipeline的配置页面,找到Throttle Concurrent Builds选项(未显示需先安装插件)
  • 勾选Throttle concurrent builds,选择This project作为节流范围
  • 设置Maximum concurrent builds为1(确保同一时间仅1个构建运行)
  • 找到Queue throttling区域,设置Maximum number of builds in queue为1
  • 保存配置后,新的构建请求会被拦截,仅当队列无任务时才会进入队列

若不想用插件,也可通过Lockable Resources Plugin配合Pipeline脚本实现:

pipeline {
  agent any
  options {
    disableConcurrentBuilds()
  }
  stages {
    stage('Acquire Queue Lock') {
      steps {
        lock(resource: "${JOB_NAME}-queue-lock", inversePrecedence: true) {
          // 后续构建步骤
        }
      }
    }
  }
}

该逻辑会确保同一时间仅一个构建能获取锁,新请求会阻塞在队列中,间接实现队列最多1个任务的效果。

需求2:跳过Pipeline中已完成构建的模块

核心思路是通过阶段级条件判断,跳过之前构建中已成功完成的模块,以下是两种可行方案:

方案1:基于历史构建的阶段状态判断

在每个模块构建阶段添加when条件,检查该阶段在上一次成功构建中是否已完成:

pipeline {
  agent any
  stages {
    stage('Build Module A') {
      when {
        expression {
          // 判断上一次构建存在、成功,且当前阶段在上次构建中也成功
          !(currentBuild.previousBuild?.result == 'SUCCESS' && 
            currentBuild.previousBuild?.stageResults['Build Module A']?.status == 'SUCCESS')
        }
      }
      steps {
        sh './build-module-a.sh'
      }
    }
    stage('Build Module B') {
      when {
        expression {
          !(currentBuild.previousBuild?.result == 'SUCCESS' && 
            currentBuild.previousBuild?.stageResults['Build Module B']?.status == 'SUCCESS')
        }
      }
      steps {
        sh './build-module-b.sh'
      }
    }
  }
}

若上一次构建中该模块已成功完成,当前运行会直接跳过此阶段。

方案2:基于代码变更的增量构建

通过git diff判断模块对应代码是否有变更,仅在代码变动时才构建:

pipeline {
  agent any
  stages {
    stage('Check Module A Changes') {
      steps {
        script {
          // 检查Module A目录下的文件是否有变更
          moduleAChanged = sh(
            script: 'git diff --name-only ${currentBuild.previousBuild?.changeSets*.id.join(" ")} -- module-a/',
            returnStatus: true
          ) != 0
        }
      }
    }
    stage('Build Module A') {
      when {
        expression { moduleAChanged }
      }
      steps {
        sh './build-module-a.sh'
      }
    }
  }
}

该方案更精准,仅在模块代码有变动时触发构建,避免无意义的重复操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 06:47:31