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

Jenkins声明式流水线:如何拉取GitHub最新提交且避免重复调度?

Jenkins声明式流水线解决重复构建与拉取最新代码问题

需求1:队列中有等待任务时不再调度新构建

要解决pollSCM重复触发构建导致队列积压的问题,可通过两个核心配置实现:

  • disableConcurrentBuilds():禁止同一任务同时运行多个实例,确保只有一个构建在执行,后续请求会进入队列
  • mergeQueuedBuilds():合并队列中重复的构建请求,避免同一任务在队列中存在多个等待实例

将这两个配置添加到流水线的options块中即可:

pipeline {
    agent {
        label 'BuildWin6'
    }
    options {
        disableConcurrentBuilds()
        mergeQueuedBuilds()
    }
    triggers {
        pollSCM '*/10 * * * *'
    }
    // ... 后续阶段
}

配置后,当队列中已有该任务的等待实例时,新的pollSCM触发请求会被合并,不会新增队列任务;同时同一时间只会有一个构建在运行,避免资源浪费。

需求2:任务运行时始终拉取所有仓库的最新提交

你尝试的LocalBranch: '**'可让本地分支与远程分支保持同名跟踪,但要确保每次拉取绝对最新的代码,还需添加CleanCheckout扩展,强制清空本地工作区后重新拉取远程最新提交,避免本地缓存的旧代码影响构建。

修改后的Checkout阶段示例如下:

stage('Checkout') {
    steps {
        dir('production') {
            checkout([
                $class: 'GitSCM',
                branches: [[name: '*/main']],
                extensions: [
                    [$class: 'LocalBranch', localBranch: '**'],
                    [$class: 'CleanCheckout'] // 强制清空后拉取最新代码
                ],
                userRemoteConfigs: [[credentialsId: 'b342365f-2641-4fe7-a77d-e4378431434f', url: 'git@github.com:Company/Project']]
            ])
        }
        dir('test-core') {
            checkout([
                $class: 'GitSCM',
                branches: [[name: '*/main']],
                extensions: [
                    [$class: 'LocalBranch', localBranch: '**'],
                    [$class: 'CleanCheckout']
                ],
                userRemoteConfigs: [[credentialsId: 'b342365f-2641-4fe7-a77d-e4378431434f', url: 'git@github.com:Company/Project-test-core.git']]
            ])
        }
    }
}

补充说明

  • CleanCheckout会删除本地工作区的所有文件后重新拉取,确保完全同步远程最新状态,适合构建耗时较长、对代码一致性要求高的场景
  • 如果担心CleanCheckout带来的拉取时间成本,可替换为[$class: 'PruneStaleBranch']和[$class: 'FetchChangeLog', depth: 0]组合,前者清理本地过时分支,后者拉取完整的提交历史,也能保证获取最新代码但避免完全清空工作区

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 02:55:26