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

如何在GitLab CE中禁止同一条流水线的并发执行?

GitLab CE 流水线级别并发执行控制方案

GitLab CE 没有像 Jenkins disableConcurrentBuilds 那样直接的流水线级并发禁用选项,但可以通过两种变通方式实现类似效果:

  • 用 resource_group 模拟全局锁定
    给流水线的首个关键作业配置一个专属的 resource_group,且确保这个资源组仅被当前项目的流水线使用。由于同一资源组下的作业无法并发执行,只要首个作业被锁定,整个后续流水线都会等待,间接实现全流水线的串行执行。示例配置:

    stages:
      - lock
      - build
      - test
      - deploy
    
    lock_pipeline:
      stage: lock
      script:
        - echo "Locking pipeline to block concurrent runs"
      resource_group: pipeline_global_lock
    

    所有该项目的流水线都会因抢占 pipeline_global_lock 资源组而串行执行。如果需要分支间也保持串行,确保所有分支的流水线都使用同一个资源组即可。

  • 结合API脚本实现前置检查
    在流水线的首个作业中,调用GitLab API检查当前项目是否有处于运行状态的流水线,如果有则终止当前流水线。这种方式需要配置CI/CD令牌,依赖API调用,复杂度稍高。核心脚本示例:

    # 获取当前运行中的流水线数量(排除自身)
    running_count=$(curl --silent --header "PRIVATE-TOKEN: $CI_JOB_TOKEN" \
      "$CI_API_V4_URL/projects/$CI_PROJECT_ID/pipelines?status=running" | \
      jq --arg current_id "$CI_PIPELINE_ID" '[.[] | select(.id != ($current_id | tonumber))] | length')
    
    if [ "$running_count" -gt 0 ]; then
      echo "发现已有运行中的流水线,终止当前执行"
      exit 1
    fi
    

需要注意的是,这两种方案都是替代方案,没有Jenkins的选项那么简洁直观,且各有局限:resource_group 方式在多分支场景下若要分支间串行,需共用资源组;API方式则依赖网络稳定性和CI/CD令牌权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 09:49:58