如何合并.gitlab-ci.yml中的序列?
How to merge sequences in .gitlab-ci.yml?
我试图消除在 GitLab CI 中设置多个任务的一些冗余。作为一个(大大)简化的例子,我有两个工作涉及调用 apt-get update
:
job1:
before_script:
- apt-get update
- apt-get install foo
job2:
before_script:
- apt-get update
- apt-get install bar
不喜欢重复,希望通过anchors的帮助"clean up" yaml如下:
.update: &update
before_script:
- apt-get update
job1:
<<: *update
before_script:
- apt-get install foo
job2:
<<: *update
before_script:
- apt-get install bar
但是,before_script
节似乎没有与 *update
合并。相反,我发现后一个被覆盖。不过,这与 GitLab CI 文档以及 Wikipedia 上的示例形成对比。
通过一些实验,我设法得到以下 运行:
.update: &update apt-get update
job1:
before_script:
- *update
- apt-get install foo
job2:
before_script:
- *update
- apt-get install bar
明显向前迈进了一步。但考虑到我打算进行更复杂的替换,这很难令人满意。供参考:这是在 GitLab v 8.12 上。
我认为您误解了 <<:
合并的作用。它使用锚定映射中的键值对预填充它所属的映射。合并之后的任何键都将添加到该映射中,其中一个合并映射中已存在的键的值将被该值覆盖。 Here 是文档。
在 YAML 中没有追加序列之类的东西,就像您在期望中描述的那样。合并是键级别的,不是递归的(不是映射,也不是序列)
Gitlab 13.9 添加了!reference
关键字:
.setup:
before_script: apt-get update
job1:
before_script:
- !reference [.setup, before_script]
- apt-get install foo
job2:
before_script:
- !reference [.setup, before_script]
- apt-get install bar
reference
和 extend
的结合非常好,可以帮助您解决冗余问题。
我试图消除在 GitLab CI 中设置多个任务的一些冗余。作为一个(大大)简化的例子,我有两个工作涉及调用 apt-get update
:
job1:
before_script:
- apt-get update
- apt-get install foo
job2:
before_script:
- apt-get update
- apt-get install bar
不喜欢重复,希望通过anchors的帮助"clean up" yaml如下:
.update: &update
before_script:
- apt-get update
job1:
<<: *update
before_script:
- apt-get install foo
job2:
<<: *update
before_script:
- apt-get install bar
但是,before_script
节似乎没有与 *update
合并。相反,我发现后一个被覆盖。不过,这与 GitLab CI 文档以及 Wikipedia 上的示例形成对比。
通过一些实验,我设法得到以下 运行:
.update: &update apt-get update
job1:
before_script:
- *update
- apt-get install foo
job2:
before_script:
- *update
- apt-get install bar
明显向前迈进了一步。但考虑到我打算进行更复杂的替换,这很难令人满意。供参考:这是在 GitLab v 8.12 上。
我认为您误解了 <<:
合并的作用。它使用锚定映射中的键值对预填充它所属的映射。合并之后的任何键都将添加到该映射中,其中一个合并映射中已存在的键的值将被该值覆盖。 Here 是文档。
在 YAML 中没有追加序列之类的东西,就像您在期望中描述的那样。合并是键级别的,不是递归的(不是映射,也不是序列)
Gitlab 13.9 添加了!reference
关键字:
.setup:
before_script: apt-get update
job1:
before_script:
- !reference [.setup, before_script]
- apt-get install foo
job2:
before_script:
- !reference [.setup, before_script]
- apt-get install bar
reference
和 extend
的结合非常好,可以帮助您解决冗余问题。