continuous-integration - CircleCI 作业批准不执行作业
问题描述
我在 CircleCI 配置中有以下工作流设置:
// <<< definition of unit_tests, integration_tests and deploy jobs >>>
workflows:
version: 2
build-test-and-deploy:
jobs:
- unit_tests
- integration_tests:
requires:
- unit_tests
- build_images:
requires:
- integration_tests
filters:
branches:
only:
- production
- deploy:
type: approval
requires:
- build_images
filters:
branches:
only:
- production
目标是停止工作流执行,直到手动批准部署到生产。触发工作流执行时,它会在部署作业之前正确停止,但在 UI 中单击“批准”后,不会触发部署作业并且工作流以成功结束。
你知道出了什么问题吗?
解决方案
CircleCI 文档包含此类设置必须满足的一些要求:
approval
是一种特殊的工作类型,仅适用于workflow
键下的工作hold
作业必须是不被任何其他作业使用的唯一名称。- 要持有的作业的名称是任意的 - 例如,它可以是
wait
或pause
,只要作业中有一个type: approval
键。> - 在手动批准的作业之后运行的所有作业都必须require:
是该作业的名称。参考deploy: job
上面的例子。- 作业按定义的顺序运行,直到工作流处理带有
type: approval
键的作业,然后是它所依赖的作业。
配置应该有一个以上未配置的作业,其唯一目的是停止执行:
// <<< definition of unit_tests, integration_tests and deploy jobs >>>
workflows:
version: 2
build-test-and-deploy:
jobs:
- unit_tests
- integration_tests:
requires:
- unit_tests
- build_images:
requires:
- integration_tests
filters:
branches:
only:
- production
- hold:
type: approval
requires:
- build_images
filters:
branches:
only:
- production
- deploy:
requires:
- hold
filters:
branches:
only:
- production
要点是作业必须配置为顺序(deploy
作业要求halt
作业完成)。
推荐阅读
- javascript - 如何在现有的 Angular 项目中使用 React 组件?
- python - Python - 通过传递带有模型名称的字符串作为输入来获取 Scikit-Learn 分类器
- python - 使用 TensorFlow 对象检测 API eval.py 获取 mAP
- reactjs - 如何修复“在 DragSource(Component) 的上下文中找不到拖放管理器”
- javascript - 用 javascript 替换模板中的文本
- android - Android 为 EditText 设置新的行和长度限制
- angular - 有没有办法将编译的角度生产应用程序与过时的开发源进行比较?
- dart - 资产文件夹中的 Flutter Excel 工作表
- build - 在 dotnet 构建时不断收到警告 MSB3245
- javascript - 如何使用通向另一个表单的 Next Button 或 Tab 创建多个表