我在 Gitlab-CI 中有一个管道,其中一项工作有规则:
rules:
- if: "$CI_PIPELINE_SOURCE == "merge_request_event"
如果改成:会有什么不同吗
- if: "$CI_PIPELINE_SOURCE == "merge_request_event"
when: always
因为,第一个规则会在满足条件时执行 和替代规则(when: always 的那个)会做同样的事情。
那么“when: always”会改变什么?如果它会改变任何东西。
是的,有区别。默认情况下,
when:
的值为 on_success
——作业仅在前面阶段的作业成功时运行。使用 always
将允许作业运行,即使前一阶段的作业失败。
Per the docs这些是
when
的可能值:
(默认):仅当早期阶段的所有作业都成功或具有 allow_failure: true 时才运行作业。on_success
:仅在手动触发时运行作业。manual
:不管前面阶段的作业状态如何,都运行作业。也可以用在 workflow:rules 中。always
:仅当早期阶段至少有一个作业失败时才运行该作业。 allow_failure: true 的工作总是被认为是成功的。on_failure
:将作业的执行延迟指定的持续时间。delayed
:不要运行作业。只能在规则部分或工作流中使用:规则。never
但是如果您执行以下操作,它实际上与第一个示例相同:
- if: "$CI_PIPELINE_SOURCE == "merge_request_event"
when: on_success
这还假设
when:
未在作业正文中使用。
例如,这是不允许的:
myjob:
when: always
rules:
- if: ...
when: on_success
在这种情况下,将
when:
添加到规则中会导致错误。