我试图在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
Run Code Online (Sandbox Code Playgroud)
不是重复的忠实粉丝,我希望我能够通过锚点帮助"清理"yaml ,如下所示:
.update: &update
before_script:
- apt-get update
job1:
<<: *update
before_script:
- apt-get install foo
job2:
<<: *update
before_script:
- apt-get install bar
Run Code Online (Sandbox Code Playgroud)
但是,似乎这些before_script节没有与之合并*update.相反,我发现后者被覆盖了.这与GitLab CI文档以及维基百科上的示例形成鲜明对比.
通过一些实验,我设法得到以下运行:
.update: &update apt-get update
job1:
before_script:
- *update
- apt-get install foo
job2:
before_script:
- *update
- apt-get install bar
Run Code Online (Sandbox Code Playgroud)
显然是向前迈进了一步.但鉴于我打算进行更复杂的替换,这很难令人满意.供参考:这是在GitLab v 8.12上.
我认为你误解了<<:合并的作用.它使用锚定映射中的键值对预先填充它所属的映射.并且合并后的任何键都会添加到该映射中,其中一个合并映射中已存在的键的值将被该值覆盖.这是文档.
在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
Run Code Online (Sandbox Code Playgroud)
联盟reference和extend好才是真的好,并会帮助你战斗冗余。
| 归档时间: |
|
| 查看次数: |
2865 次 |
| 最近记录: |