如何将GitLab Runner标签列表抽离为独立YML文件引入使用
问题根因
配置不生效和解析顺序、变量兼容性没有任何关系,属于语法用法错误:GitLab CI 的 include 关键字仅允许写在配置文件最顶层,作用是将外部YAML文件的全量内容合并到当前配置的顶层结构中,不支持在作业内部、parallel.matrix 这类子配置节点下局部引入文件片段,你之前的写法属于非法语法,自然会导致流水线启动失败。
可行实现方案
以下两种方案都可以实现Runner列表独立文件维护,不需要修改主配置即可更新Runner清单:
方案1:全版本兼容方案(推荐,无版本要求)
通过顶层include加载外部定义的隐藏配置模板,再通过extends合并配置,所有GitLab版本都支持,稳定性最高。
- 调整独立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只需要修改这个列表即可
- 主配置
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标签简化配置写法:
- 独立Runner配置文件
gitlab-ci-dev-runners.yml内容:
.dev_runner_config: matrix: - DEV_RUNNER: runner1 - DEV_RUNNER: runner2
- 主配置中直接引用外部模板的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
相关产品推荐
相关产品推荐

