能否在.gitlab-ci.yml中新增模板外的Stage且不修改原模板?
解决GitLab CI自定义阶段与模板阶段冲突的问题
问题原因
在GitLab CI中,若主配置文件(.gitlab-ci.yml)重新定义stages字段,会直接覆盖模板文件(template.yaml)中定义的stages,导致模板里的a2、a3阶段被替换为你自定义的a1,因此job2指定的a2阶段不存在,触发报错。
无需修改模板的解决方案
可以通过合并模板阶段与自定义阶段的方式解决,无需改动模板文件:
方法1:使用!reference指令(推荐,GitLab 14.0+支持)
在主配置文件中,通过!reference引用模板里的stages数组,再将自定义的a1阶段添加进去,实现阶段合并:
include: - local: 'template.yaml' # 合并自定义阶段与模板阶段 stages: - a1 - !reference [stages]
这样最终的阶段列表会是:.pre、a1、a2、a3、.post,job2指定的a2阶段就会被识别。
方法2:手动复制模板阶段(兼容低版本GitLab)
如果你的GitLab版本低于14.0,不支持!reference,可以直接在主配置文件的stages中手动添加模板里的a2、a3阶段,无需修改模板文件:
include: - local: 'template.yaml' stages: - a1 - a2 - a3
这种方式虽然需要手动同步模板的阶段,但不需要修改模板本身,也能解决报错问题。
内容的提问来源于stack exchange,提问作者Marcelo BD
相关产品推荐
相关产品推荐

