GitLab流水线应在流水线失败时停止。

10

enter image description here我在GitLab上有一个样例pipeline,我希望当任何作业失败时,管道可以停止。以下是我用于复制此场景的代码。虽然管道显示为失败状态,但是即使在失败阶段后,作业仍会继续运行。示例请参见附图。

  stages:
  - unittest
  - coverage_test
  - static_code_analysis

variables:
  skip_integration:
    value: 'false'
    description: "This variable for skipping integration tests"
  skip_migration:
    value: 'false'

unittest:
  stage: unittest
  script:
    - echo "testing the code"
  rules:
    - if: '$CI_COMMIT_BRANCH == "master"' 
      when: always
    - if: '$skip_integration == "true"'
      when: never 
    - if: '$skip_integration == "false"'
      when: always

    
lint_test:
  stage: static_code_analysis
  allow_failure: false
  script:
    - echo "this is a test"
  rules:
    - if: '$CI_COMMIT_BRANCH == "master"' 
      when: always
    - if: '$skip_integration == "true"'
      when: never 
    - if: '$skip_integration == "false"'
      when: always
    - when: on_success

coverage_test:
  stage: coverage_test
  script:
    - echo00 "this is test again"
  rules:
    - if: '$CI_COMMIT_BRANCH == "master"' 
      when: always
    - if: '$skip_integration == "true"'
      when: never 
    - if: '$skip_integration == "false"'
      when: always
    - when: on_success

但是管道在失败时并不停止。


三个阶段不链接是需要的吗?例如,第三个阶段不依赖于第二个阶段。 - Gaël J
2个回答

22
when: always
正如其名称所示,“always”表示始终运行作业。如果您想在前一阶段成功时运行作业,请使用“on_success”选项。请将所有“always”更改为“on_success”。
when: on_success

1
谢谢您的回复。这让我明白了为什么会发生这种情况。 - Sparc Splunk

2

我在编程中使用needs成功地实现了只有前面的任务成功后才运行的功能。

lint_test:
  stage: static_code_analysis
  allow_failure: false
  script:
    - echo "this is a test"
  needs:
    - coverage_test
  rules:
    - if: '$CI_COMMIT_BRANCH == "master"' 
      when: always
    - if: '$skip_integration == "true"'
      when: never 
    - if: '$skip_integration == "false"'
      when: always
    - when: on_success

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接