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

如何将GitLab Runner标签列表抽离为独立YML文件引入使用

问题根因

配置不生效和解析顺序、变量兼容性没有任何关系,属于语法用法错误:GitLab CI 的 include 关键字仅允许写在配置文件最顶层,作用是将外部YAML文件的全量内容合并到当前配置的顶层结构中,不支持在作业内部、parallel.matrix 这类子配置节点下局部引入文件片段,你之前的写法属于非法语法,自然会导致流水线启动失败。

可行实现方案

以下两种方案都可以实现Runner列表独立文件维护,不需要修改主配置即可更新Runner清单:

方案1:全版本兼容方案(推荐,无版本要求)

通过顶层include加载外部定义的隐藏配置模板,再通过extends合并配置,所有GitLab版本都支持,稳定性最高。

  1. 调整独立Runner配置文件gitlab-ci-dev-runners.yml的内容,不要只写数组片段,要定义成完整的隐藏作业模板:
# gitlab-ci-dev-runners.yml
.dev_runner_matrix:
  parallel:
    matrix:
      - DEV_RUNNER: runner1
      - DEV_RUNNER: runner2
      - DEV_RUNNER: runner3
      # 后续新增/删除Runner只需要修改这个列表即可
  1. 主配置gitlab-ci.yml在顶层引入外部文件,作业通过多继承合并基础构建配置和Runner矩阵配置:
# gitlab-ci.yml 主配置
# include必须写在最顶层
include:
  - local: gitlab-ci-dev-runners.yml

.devphase:
  stage: build
  when: manual
  only:
    - dev
  tags:
    - ${DEV_RUNNER}

Updating development environment:
  extends:
    - .devphase
    - .dev_runner_matrix

后续维护Runner列表只需要修改独立的gitlab-ci-dev-runners.yml文件,完全不需要改动主配置。如果需要跨项目复用同一份Runner清单,还可以把Runner配置文件放到公共运维仓库,include时指定仓库地址即可实现全项目共用配置。

方案2:高版本简洁写法(GitLab 15.11+ 支持)

如果你的GitLab版本在15.11及以上,可以搭配!reference标签简化配置写法:

  1. 独立Runner配置文件gitlab-ci-dev-runners.yml内容:
.dev_runner_config:
  matrix:
    - DEV_RUNNER: runner1
    - DEV_RUNNER: runner2
  1. 主配置中直接引用外部模板的matrix配置:
include:
  - local: gitlab-ci-dev-runners.yml

.devphase:
  stage: build
  only:
    - dev
  tags:
    - ${DEV_RUNNER}

Updating development environment:
  extends: .devphase
  parallel:
    matrix: !reference [.dev_runner_config, matrix]
注意事项
  • 不要尝试在parallel.matrix、tags、script这类子配置节点下嵌套写include,该语法至今没有被GitLab CI支持,后续版本也没有相关支持规划。
  • 如果需要区分不同环境(开发、测试、生产)的Runner列表,只需要在独立配置文件中定义多个对应矩阵模板,主配置中按需继承即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 23:00:57