GitLab CD / CD:如果前一个阶段A失败,是否有办法允许强制执行管道阶段B,否则自动执行阶段B?

时间:2020-04-06 17:10:00

标签: continuous-integration gitlab gitlab-ci gitlab-ce

考虑GitLab CI / CD管道,该管道包括两个随后的阶段:A和B。

如果阶段A成功,那么我希望阶段B自动执行。 但是,如果阶段A失败,我不希望阶段B自动执行,但是仍然有可能手动强制执行阶段B。

我该如何实现?

2 个答案:

答案 0 :(得分:1)

我至少可以看到两种方法来实现这一目标(当管道失败时,您将需要再次手动触发整个管道,而不仅仅是一个阶段):

  1. 在阶段B when: always中标记作业以执行作业,而不管先前阶段中作业的状态如何。
firstFailingJob:
  stage: test
  script:
    - echo I will always fail
    - exit 1

secondExecuteWhenManualTrigger:
  stage: deploy
  script:
    - echo I should run even when first failed when triggered manually
  rules:
    - if: '$CI_PIPELINE_SOURCE == "web"'
      when: always
    - when: on_success

请注意,整个管道的结果将失败,如下所示。 Always execute second job for manual trigger 2.用allow_failure: true标记可能失败的作业,使之失败而不影响CI套件的其余部分。

firstFailingJob:
  stage: test
  script:
    - echo I will always fail
    - exit 1
  rules:
    - if: '$CI_PIPELINE_SOURCE == "web"'
      allow_failure: true
    - allow_failure: false
...

整个管道的结果将通过警告,如下所示。 Allow failure

$CI_PIPELINE_SOURCE == "web"表示管道已从GitLab gui Project page -> CI/CD -> Run Pipeline触发。您始终可以使用任何自定义变量或predefined来设置不同的条件。

答案 1 :(得分:0)

您不能分阶段做到这一点。

下一阶段的作业在上一阶段的作业之后运行 成功完成。

https://docs.gitlab.com/ee/ci/yaml/#stages

无法手动触发舞台。