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

GitLab CI/CD如何配置实现同阶段任务串行顺序执行

问题根因

调整Runner侧并发参数后同阶段任务仍然并行的核心原因:

  • GitLab CI 同一stage下的所有Job默认会被标记为待调度状态,只要有可用计算资源就会并行派发
  • Runner侧的concurrent/limit/request_concurrency参数仅能限制单台Runner同时运行的任务数,如果你环境中存在多台绑定该项目的可用Runner,或者GitLab侧没有给任务加串行调度约束,同阶段任务依然会被分配到不同Runner并行执行
解决方案

方案1:使用resource_group(最推荐,适配部署场景)

给所有需要串行执行的部署任务配置相同的resource_group,GitLab会保证同一资源组下同一时间只有1个Job运行,不管是同流水线内的任务、还是同项目不同流水线触发的任务,都会自动排队等前一个执行完成再启动,完全满足串行要求,不需要拆分原有stage结构。
配置示例:

deploy_1:
  script:
       - scp -r $CI_PROJECT_DIR/script.sh ubuntu@domain1.tld.pl:/root/script.sh
  stage: deploy
  resource_group: serial_deploy  # 所有需要串行的任务填相同的自定义组名即可
  only:
    - master

deploy_2:
  script:
       - scp -r $CI_PROJECT_DIR/script.sh ubuntu@domain2.tld.pl:/root/script.sh
  stage: deploy
  resource_group: serial_deploy
  only:
    - master

方案2:拆分独立stage(适合需要严格指定执行顺序的场景)

GitLab CI的stage是严格按定义顺序执行的,前一个stage的所有Job执行成功后,才会启动下一个stage的任务。你可以把每个部署任务拆分到单独的自定义stage中,强制按顺序执行。
配置示例:

# 首先在文件最开头定义stages执行顺序,按你需要的部署先后排列
stages:
  - deploy_1
  - deploy_2
  # 后续新增部署任务就按顺序在这里追加stage名

deploy_1:
  script:
       - scp -r $CI_PROJECT_DIR/script.sh ubuntu@domain1.tld.pl:/root/script.sh
  stage: deploy_1
  only:
    - master

deploy_2:
  script:
       - scp -r $CI_PROJECT_DIR/script.sh ubuntu@domain2.tld.pl:/root/script.sh
  stage: deploy_2
  only:
    - master

配置生效排查点

如果配置后仍然出现并行问题,逐一检查以下配置:

  • 打开项目CI/CD设置的Runner列表,确认没有其他可用的共享Runner/项目Runner,避免任务被调度到其他未配置并发限制的Runner上
  • 确认修改Runner的config.toml配置文件后,已经执行gitlab-runner restart命令重启Runner服务,否则配置不会生效
  • 检查所有部署Job的配置,删除parallel这类会触发单任务多副本并行的参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 23:36:07