CircleCI作业批准不执行作业

时间:2019-01-22 08:54:26

标签: 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中单击“批准”后,不会触发部署作业,并且工作流程会成功结束。

你知道怎么了吗?

1 个答案:

答案 0 :(得分:1)

CircleCI文档contains很少有此类设置必须满足的要求:

  
      
  • approval是一种特殊的工作类型,仅适用于workflow键下的工作
  •   
  • hold作业必须是任何其他作业都不能使用的唯一名称。
  •   
  • 要保留的作业的名称是任意的-例如,只要作业中具有wait键,它就可以是pausetype: 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作业)。