GitLab CI继承模板时如何正确重写清空job的artifacts配置
GitLab CI 继承模板时清空artifacts的正确方法
为什么artifacts: []不生效
GitLab CI 处理extends关键字的配置继承时,对哈希类型的配置默认执行深度合并,而非全量替换。
基础模板中的artifacts是包含expire_in、reports、paths属性的哈希结构,写artifacts: []属于空数组,类型和父级配置不匹配,会被合并逻辑直接忽略,父级的artifacts规则会完整继承下来,自然无法达到清空效果。
可直接使用的生效方案
方案1(推荐,适配GitLab 13.0+全版本):用inherit显式关闭artifacts继承
GitLab原生提供了inherit关键字用来精确控制从父作业继承的配置项,直接声明不继承artifacts即可,不需要额外写空的artifacts配置:
include: 'base.yaml' build:child: extends: [build] before_script: [] script: - *run-nuget-restore - *build-release inherit: artifacts: false
该配置下build:child作业既不会继承父模板的任何artifacts规则,自身也没有定义artifacts,运行时不会生成、传递任何制品。
方案2(兼容老版本GitLab):显式覆盖artifacts的所有子属性
如果使用的是13.0以前的GitLab版本(对inherit的细粒度控制支持不完善),可以显式将父级artifacts下的所有属性置空,通过哈希合并覆盖原有配置:
include: 'base.yaml' build:child: extends: [build] before_script: [] script: - *run-nuget-restore - *build-release artifacts: expire_in: null reports: {} paths: [] exclude: []
注意:该方案需要把父级artifacts下出现的所有键都显式置空,漏写的属性依然会从父级继承生效,维护成本更高,仅作兼容场景使用。
内容的提问来源于stack exchange,提问作者DAG
相关产品推荐
相关产品推荐

