You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitLab CI中使用extends时作业属性的合并与覆盖规则

GitLab CI extends 关键字的属性合并/覆盖规则

在GitLab CI中,你可以使用extends关键字继承另一个作业或模板的属性。以下是一个简单示例:

.tests:
  script: rake test
  stage: test
  only:
    refs:
      - branches

rspec:
  extends: .tests
  script: rake rspec
  only:
    variables:
      - $RSPEC

继承后的最终作业配置如下:

rspec:
  script: rake rspec
  stage: test
  only:
    refs:
      - branches
    variables:
      - $RSPEC

可以看到不同属性的处理逻辑存在差异:only这类属性会合并,而script这类属性会被覆盖。下面是完整的属性行为规则列表:

属性使用extends时的行为
script被覆盖(子作业的script完全替换父模板的配置)
only/except合并(子作业的规则与父模板的规则组合,refs、variables等子字段分别合并)
variables合并(子作业的变量添加到父模板的变量集中,同名变量被子作业的配置覆盖)
before_script被覆盖
after_script被覆盖
needs合并(子作业的依赖项追加到父模板的依赖列表中)
cache合并(将父模板和子作业的cache配置转换为列表,保留各自的缓存规则)
artifacts深度合并(子作业的配置与父模板的配置逐层合并,比如paths追加、同名子项被子项覆盖)
services合并(子作业的服务追加到父模板的服务列表中)
when被覆盖(子作业的when值完全替换父模板的配置)
rules合并(子作业的规则追加到父模板的规则列表末尾,规则按定义顺序执行)
stage被覆盖(子作业指定的阶段替换父模板的配置)
tags合并(子作业的标签追加到父模板的标签列表中)
allow_failure被覆盖
image被覆盖
timeout被覆盖

内容的提问来源于stack exchange,提问作者Forivin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 19:50:11