首页 > 解决方案 > 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 中单击“批准”后,不会触发部署作业并且工作流以成功结束。

你知道出了什么问题吗?

标签: continuous-integrationcircleci

解决方案


CircleCI 文档包含此类设置必须满足的一些要求:

  • approval是一种特殊的工作类型,仅适用于workflow键下的工作
  • hold作业必须是不被任何其他作业使用的唯一名称。
  • 要持有的作业的名称是任意的 - 例如,它可以是waitpause,只要作业中有一个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作业完成)。


推荐阅读