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

GitLab如何让整个流水线在同一Runner上执行

解决GitLab流水线多阶段同Runner执行问题

问题背景

你的流水线包含download、build、test三个阶段,dev环境配置了多个带linux标签的Runner。多用户触发流水线时,各阶段会被调度到不同Runner,导致本地文件无法共享,输出不符合预期。需求是让整个流水线的所有阶段都在启动download的同一个Runner上完成。

解决方案

方案一:绑定Runner唯一标签

给每个dev环境的Runner添加唯一标签(比如给git-runner-dev-1加dev-runner-1标签,git-runner-dev-2加dev-runner-2标签),同时保留linux标签。然后在流水线YAML中指定该唯一标签,确保全流水线作业都调度到同一个Runner:

stages:
  - download
  - build
  - test

download:
  stage: download
  script:
    - echo "===== 从Artifactory下载项目压缩包 ====="
    # 替换为实际下载命令
  tags:
    - linux
    - dev-runner-1

build:
  stage: build
  script:
    - echo "===== 编译并部署压缩包 ====="
    # 替换为实际编译部署命令
  tags:
    - linux
    - dev-runner-1

test:
  stage: test
  script:
    - echo "===== 执行测试并上传结果 ====="
    # 替换为实际测试命令
  tags:
    - linux
    - dev-runner-1

说明:该方式需手动指定Runner,灵活性较低,适合固定使用特定Runner的场景。

方案二:限制Runner并发数为1

修改dev环境每个Runner的config.toml配置文件,将concurrent设为1,确保每个Runner同一时间只能处理一个作业。这样流水线的三个阶段会依次排队在同一个Runner上执行:

# Runner config.toml示例
concurrent = 1
check_interval = 0

[[runners]]
  name = "git-runner-dev-1"
  url = "你的GitLab实例地址"
  token = "Runner令牌"
  executor = "shell"
  tags = ["linux"]

修改后,download阶段占用某个Runner后,后续的build和test会等待该Runner空闲后执行,从而保证全流水线在同一Runner上完成。

方案三:用Artifacts传递文件(标准替代方案)

如果不需要严格限制在同一Runner上,推荐使用GitLab CI的artifacts功能传递文件,即使作业在不同Runner上执行也能共享数据:

stages:
  - download
  - build
  - test

download:
  stage: download
  script:
    - echo "===== 从Artifactory下载项目压缩包 ====="
    # 替换为实际下载命令
  artifacts:
    paths:
      - ./downloads/*.zip  # 指定要传递的文件路径
    expire_in: 1h  # 设置文件过期时间
  tags:
    - linux

build:
  stage: build
  script:
    - echo "===== 编译并部署压缩包 ====="
    # 使用download阶段传递的文件执行编译
  artifacts:
    paths:
      - ./build/*  # 传递编译产物给test阶段
    expire_in: 1h
  tags:
    - linux
  needs: [download]  # 明确依赖download阶段

test:
  stage: test
  script:
    - echo "===== 执行测试并上传结果 ====="
    # 使用build阶段传递的产物执行测试
  tags:
    - linux
  needs: [build]  # 明确依赖build阶段

这种方式是GitLab CI的标准实践,无需限制Runner调度,同时解决文件共享问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 23:23:11