如何避免GitLab CI引入多份yml文件时覆盖test阶段的作业?
解决方案
你可以直接在项目自身的.gitlab-ci.yml中覆盖外部模板的作业属性,无需修改外部模板源码,本地配置优先级始终高于外部引入的模板配置。
方案1:保留所有作业在test阶段运行
两份模板作业冲突的核心原因是后加载的Checkmarx模板的规则间接屏蔽了前序作业,你可以显式声明两个作业的触发规则,保证都被调度:
# 显式声明阶段,确保test阶段存在 stages: - test # 覆盖Code Quality作业配置,保证触发规则生效 code_quality: stage: test # 按需调整为你需要的触发规则,示例为所有分支提交都触发 rules: - if: $CI_COMMIT_BRANCH # 覆盖Checkmarx作业配置,和Code Quality的触发规则对齐 checkmarx: stage: test rules: - if: $CI_COMMIT_BRANCH include: - template: Code-Quality.gitlab-ci.yml - remote: 'https://raw.githubusercontent.com/checkmarx-ltd/cx-flow/develop/templates/gitlab/v3/Checkmarx.gitlab-ci.yml'
方案2:拆分作业到不同阶段
如果不想修改原有作业的触发规则,也可以单独修改其中一份作业的所属阶段:
# 新增code_quality专属阶段 stages: - test - code-quality-check # 重写Code Quality作业的阶段属性 code_quality: stage: code-quality-check include: - template: Code-Quality.gitlab-ci.yml - remote: 'https://raw.githubusercontent.com/checkmarx-ltd/cx-flow/develop/templates/gitlab/v3/Checkmarx.gitlab-ci.yml'
内容的提问来源于stack exchange,提问作者c_sagan
相关产品推荐
相关产品推荐

