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
相关产品推荐
相关产品推荐

