如何配置Gitlab Pipeline实现任意Job失败后流水线立即停止?
GitLab 流水线失败即停止配置修复方案
原场景运行效果:
问题根因
当前配置无法实现失败立即停止的核心原因是:所有Job的rules规则中优先匹配了when: always条件,该参数会强制忽略前序阶段的执行结果,无论前面是否有Job失败,都会无条件启动当前Job,因此出现前序阶段失败后后续任务依然运行的问题。
此外每个Job规则末尾冗余的- when: on_success优先级低于前面的when: always,不会生效。
调整方案
只需对所有Job的规则做两处修改即可:
- 移除所有规则中不必要的
when: always配置,GitLab默认的Job执行策略就是when: on_success,即仅前序所有阶段全部成功时才会执行当前Job - 删除冗余的末尾
- when: on_success规则
调整后完整配置
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"' - if: '$skip_integration == "true"' when: never - if: '$skip_integration == "false"' lint_test: stage: static_code_analysis allow_failure: false script: - echo "this is a test" rules: - if: '$CI_COMMIT_BRANCH == "master"' - if: '$skip_integration == "true"' when: never - if: '$skip_integration == "false"' coverage_test: stage: coverage_test script: - echo00 "this is test again" rules: - if: '$CI_COMMIT_BRANCH == "master"' - if: '$skip_integration == "true"' when: never - if: '$skip_integration == "false"'
补充说明
如果需要特殊场景下指定某类Job忽略前序结果执行,再单独给对应规则添加when: always即可,全局默认保持不配置就会遵循前序失败则后续停止的策略。
内容的提问来源于stack exchange,提问作者Sparc Splunk
相关产品推荐
相关产品推荐


