continuous-integration - GitLab CD/CD:如果前一个阶段 A 失败,是否有办法允许手动执行管道阶段 B,否则自动执行阶段 B?
问题描述
考虑由两个后续阶段组成的 GitLab CI/CD 管道:A 和 B。
如果阶段 A 成功,我希望阶段 B 自动执行。但是如果 A 阶段失败,我不希望 B 阶段自动执行,但仍然有可能手动强制执行 B 阶段。
我怎样才能做到这一点?
解决方案
我可以看到至少有两种方法可以实现这一点(当您的管道失败时,您将需要再次手动触发整个管道,而不仅仅是一个阶段):
- 在阶段 B 中标记作业时:始终执行作业,而不管先前阶段的作业状态如何。
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
请注意,整个管道的结果将失败,如下所示。 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
...
$CI_PIPELINE_SOURCE == "web"
表示管道已从 GitLab gui 触发Project page -> CI/CD -> Run Pipeline
。您始终可以使用任何变量自定义或预定义设置不同的条件。
推荐阅读
- multithreading - Rust 官方教程带模拟测试的多线程 Web 服务器 - 空请求
- ios - 制作 AdMob 横幅广告无法在 iOS 上加载
- python - 在 TensorFlow 模型中重用经过训练的权重,无需重新初始化
- java - 组织 Singleton 类和在项目中处理它的类的最佳方法?
- python - Python 是,== 运算符优先级
- php - 将搜索重定向到主页
- java - java:如果正确,我该如何使用
- version-control - Shopify 团队的版本控制?
- java - Logback、Eclipse 和 Maven
- powershell - 脚本中的问题:调用命令“错误:通信出错”