仅限 Gitlab CI:不能按预期使用锚点和 .extends
Posted
技术标签:
【中文标题】仅限 Gitlab CI:不能按预期使用锚点和 .extends【英文标题】:Gitlab CI only: does not work as expected with anchors and .extends 【发布时间】:2022-01-19 13:19:29 【问题描述】:我目前正在使用 Gitlab-CI,但遇到了奇怪的行为。
我目前正在尝试这样的事情:
.when-to-use: &WhenToUse
- merge_requests
- master
- main
- develop
- /.*/
- tags
job1:
only:
*WhenToUse
variables: [ $JACOCO == "true" ]
我的预期行为是,唯一的块包含 WhenToUse 列表以及变量块。
无论我如何尝试它都不起作用(如果有人知道我如何做到这一点,那将非常感激)但这实际上并不是我发现的奇怪行为。
然后我将此 .yml 更改为:
.when-to-use: &WhenToUse
- merge_requests
- master
- main
- develop
- /.*/
- tags
.testWrapper:
stage: test
only:
*WhenToUse
job1:
extends: .testWrapper
job2:
extends: .testWrapper
only:
variables: [ $JACOCO == "true" ]
现在根据这个documentation,这应该会导致行为,job1s only:
包含.whenToUse
列表(它确实如此),job2s only:
包含.whenToUse
列表(它没有)+ variables: [ $JACOCO == "true" ]
(确实如此),这意味着它实际上并没有被扩展而是被覆盖。
有谁知道为什么会发生这种行为,甚至可能如何解决它?
缩进都是正确的,因为管道已执行,但与我预期的方式不同。
【问题讨论】:
【参考方案1】:事实证明,问题在于我在技术上覆盖了only
。
问题的解决方法如下:
.when-to-use: &WhenToUse
- merge_requests
- master
- main
- develop
- /.*/
- tags
.testWrapper:
stage: test
only:
refs:
*WhenToUse
job1:
extends: .testWrapper
job2:
extends: .testWrapper
only:
variables: [ $JACOCO == "true" ]
添加refs:
(我认为无论如何都是正确的方法)意味着没有任何部分被覆盖并且检查都正确执行。
【讨论】:
以上是关于仅限 Gitlab CI:不能按预期使用锚点和 .extends的主要内容,如果未能解决你的问题,请参考以下文章