Gitlab CI - 有 when:always 的规则和没有的规则有区别吗?

问题描述 投票:0回答:1

我在 Gitlab-CI 中有一个管道,其中一项工作有规则:

rules:
  - if: "$CI_PIPELINE_SOURCE == "merge_request_event"

如果改成:会有什么不同吗

  - if: "$CI_PIPELINE_SOURCE == "merge_request_event"
    when: always

因为,第一个规则会在满足条件时执行 和替代规则(when: always 的那个)会做同样的事情。

那么“when: always”会改变什么?如果它会改变任何东西。

if-statement gitlab gitlab-ci pipeline rules
1个回答
0
投票

是的,有区别。默认情况下,

when:
的值为
on_success
——作业仅在前面阶段的作业成功时运行。使用
always
将允许作业运行,即使前一阶段的作业失败。

Per the docs这些是

when
的可能值:

on_success
(默认):仅当早期阶段的所有作业都成功或具有 allow_failure: true 时才运行作业。
manual
:仅在手动触发时运行作业。
always
:不管前面阶段的作业状态如何,都运行作业。也可以用在 workflow:rules 中。
on_failure
:仅当早期阶段至少有一个作业失败时才运行该作业。 allow_failure: true 的工作总是被认为是成功的。
delayed
:将作业的执行延迟指定的持续时间。
never
:不要运行作业。只能在规则部分或工作流中使用:规则。

但是如果您执行以下操作,它实际上与第一个示例相同:

  - if: "$CI_PIPELINE_SOURCE == "merge_request_event"
    when: on_success

这还假设

when:
未在作业正文中使用。

例如,这是不允许的:

myjob:
  when: always
  rules:
    - if: ...
      when: on_success

在这种情况下,将

when:
添加到规则中会导致错误。

© www.soinside.com 2019 - 2024. All rights reserved.