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

GitLab CI流水线如何实现Runner充足时并行、不足时串行执行?

解决方案:弹性调度的GitLab CI任务编排方案

核心思路

放弃绑定Runner唯一标签的强关联方式,改用共享标签+同阶段无排他任务的配置,利用GitLab CI原生的任务调度逻辑,实现Runner充足时并行执行,不足时自动排队串行,同时避免Runner故障导致流水线中断。

具体配置方案

1. Runner标签重置

将3台Runner的标签统一设置为acr(无需保留acr-1/acr-2/acr-3这类唯一标签),确保所有Runner都能接收带有acr标签的任务。

2. 流水线配置调整

有两种实现方式,根据任务独立性选择:

方式一:矩阵并行任务(适用于任务逻辑相似的场景)
stages:
  - build

# 用矩阵定义3个并行任务,共享acr标签
build_tasks:
  stage: build
  tags: [acr]
  script:
    - echo "执行任务 $CI_JOB_INDEX"
    - sleep 420  # 模拟7分钟耗时任务
  parallel: 3  # 启动3个并行实例
方式二:独立并行任务(适用于任务逻辑不同的场景)
stages:
  - build

job_1:
  stage: build
  tags: [acr]
  script:
    - echo "执行任务1"
    - sleep 420

job_2:
  stage: build
  tags: [acr]
  script:
    - echo "执行任务2"
    - sleep 420

job_3:
  stage: build
  tags: [acr]
  script:
    - echo "执行任务3"
    - sleep 420

方案优势

  • 并行效率:当3台Runner全部可用时,同阶段的3个任务会被自动分配到不同Runner,总耗时保持约7分钟。
  • 容错降级:若1-2台Runner故障,剩余Runner会先执行已分配的任务,待Runner释放后自动处理排队任务,流水线不会中断,仅总耗时随可用Runner数量增加而延长(2台Runner时约14分钟,1台时约21分钟)。
  • 维护简单:无需为每个任务绑定特定Runner标签,Runner扩容或故障时无需调整流水线配置。

优化补充

  • 给每台Runner的config.toml设置concurrent = 1,确保单个Runner同一时间只执行一个任务,避免资源竞争导致任务耗时增加。
  • 若需区分任务优先级,可通过resource_group配置实现任务排队的顺序控制,但默认调度逻辑已能满足基础需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 00:27:04