在 GitLab 13.9
中增加了一个新的关键字 !reference
。 这个关键字可以在任意位置复用已存在的配置。
1
2
3
4
| # tree
ci/setup.yml
.gitlab-ci.yml
|
1
2
3
4
5
6
| # 以 . 开头的 job 名称为 隐藏job , 将在 ci 中将被忽略
# https://docs.gitlab.com/ee/ci/yaml/README.html#hide-jobs
.setup:
image: hub-dev.rockontrol.com/docker.io/library/alpine:3.12
script:
- echo creating environment
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| ## 包含 ci/setup.yml 文件
include:
- local: ci/setup.yml
stages:
- prepare
- run
- clean
# 本地隐藏 job
.clean:
image: hub-dev.rockontrol.com/docker.io/library/debian:buster-slim
after_script:
- echo make clean
job1:
stage: prepare
# 引用 setup 中的 image
image: !reference [.setup, image]
script:
- !reference [.setup, script]
- echo running my own command in job1
# 隐藏 job 将不会被执行
.job2:
stage: run
# 复用 setup 中的 image
image: !reference [.setup, image]
script:
- echo running my own command in job2
job3:
stage: clean
# 复用 `job1 中复用的 image`
image: !reference [job1, image]
script:
- !reference [.clean, after_script]
|
执行效果如下
注意
!reference
不仅可以复用本文中的 image , 更可以复用其他 job 中的任意字段!reference
配合 include
和 .hidden_job
更可以实现通用配置!reference
关键字后的数组实际就是被复用内容在 job 索引路径。 (ex. [.clean, after_script]
, 为 .clean
隐藏job 的 after_script
命令)