如何让gitlab-ci流水线不重复且便于多项目统一维护?
多项目共用统一流水线的低成本维护方案
当前场景与痛点
- 所有项目仓库的Makefile都内置通用目标:
make init、make compile、make report - 原本每个项目都单独维护一套逻辑相当复杂的CI流水线YAML,核心结构的伪代码示例:
stage: one script: make init + make compile stage: two script: make init + make report stage: three script: make init TEST=true ...
- 现存问题:所有项目的流水线规则始终保持内容统一,但每新增一个流水线功能,都需要逐个更新所有仓库的配置,重复工作量极大。目标是实现仅维护单个统一配置文件,就能同步所有项目的流水线规则。
具体实现方案
- 抽离公共配置独立仓库
- 单独搭建一个仅存放通用流水线逻辑的公共仓库,把所有跨项目共用的YAML规则、公共执行脚本全部集中在这个仓库统一维护
- 各业务项目的仓库内不再写入全量流水线逻辑,只保留极简的配置引用语句,指向公共仓库内的配置地址和指定版本即可
- 后续所有流水线的迭代、问题修复、规则调整,只需要在公共仓库修改一次,所有引用该配置的项目会自动同步最新的执行规则,不需要逐仓库改动
- 配置版本管控
- 给公共仓库的不同迭代版本打上固定Tag,各业务项目可以根据自身节奏选择长期绑定的配置版本,避免公共仓库的未验证更新突然对所有项目造成影响
- 新的配置版本经过测试稳定后,再逐批引导业务项目升级引用版本,整个流程的风险完全可控
- 保留差异化适配能力
- 在公共通用配置里预留可覆写的变量入口,允许单个业务项目在自己的极简配置段里自定义少量专属参数,不需要因为项目间的微小差异破坏公共配置的统一性
- 比如某个项目需要在某一个执行阶段增加额外的自定义脚本,只需要在项目自己的配置里传入对应参数,公共配置会自动识别并执行对应的逻辑,无需重复编写全量流水线代码
内容的提问来源于stack exchange,提问作者Guillaume D
相关产品推荐
相关产品推荐

