CircleCI作业批准不执行作业

zde*_*bra 2 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
Run Code Online (Sandbox Code Playgroud)

目标是停止工作流程执行,直到手动批准部署到生产。触发工作流程执行后,它会在部署作业之前正确停止,但是在UI中单击“批准”后,不会触发部署作业,并且工作流程成功结束。

你知道出什么事了吗

zde*_*bra 5

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

  • approval是一种特殊的工作类型,仅适用于该workflow钥匙下的工作
  • hold作业必须是其他任何作业都不能使用的唯一名称。
  • 要保留的作业的名称是任意的- 例如,只要作业中包含密钥,就可以是wait或。>-在手动批准的作业之后要运行的所有作业必须是该作业的名称。请参考以上示例。pausetype: approvalrequire: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
Run Code Online (Sandbox Code Playgroud)

要点是必须将作业配置为顺序的(deploy作业需要halt完成作业)。