代码之家  ›  专栏  ›  技术社区  ›  Yves M. Coder_Naveed

如何在CircleCI 2.0工作流中进行有条件的手动审批

  •  4
  • Yves M. Coder_Naveed  · 技术社区  · 7 年前

    我有一个简单的用例,我想做一个 manual approval 仅适用于特定分支和/或标记。

    具有的工作流作业 type:approval 与所有其他作业一样具有筛选器,但作业除外 需要手动批准(或不需要)的将使用类似 requires: ['approve'] 然后与之密切相关。

    这意味着 如果批准步骤与筛选器不匹配,则根本不会发生。

    所以有没有干净的解决方法,yaml文件中没有很多重复项?

    编辑: Same question on CircleCI Discuss

    2 回复  |  直到 6 年前
        1
  •  7
  •   Yves M. Coder_Naveed    7 年前

    YAML alias map

    这是一种黑客行为,但是 YAML别名映射 您可以重用您的步骤,并使用不同的过滤器创建两个独立的工作流路径:一个有批准,另一个没有批准。

    下面是一个完整的示例:

    version: 2.0
    
    # Run job (defined in a YAML alias map, see http://yaml.org/type/merge.html)
    run-core: &run-core
        docker:
          - image: circleci/node:8
        steps:
          - checkout
          - restore_cache: { key: 'xxxxx' }
          - run: npm install
          - save_cache: { key: 'xxxxx', paths: ['xxxx'] }
          - run: npm run build
          - run: npm run validate
          - deploy: ./scripts/deploy.sh
    
    # Jobs (duplicate the same job, but with different names)
    jobs:
      run:
        <<: *run-core
      run-with-approval:
        <<: *run-core
    
    # This will allow manual approval and context
    # See https://circleci.com/docs/2.0/workflows/#git-tag-job-execution
    workflows:
      version: 2
      run:
        jobs:
          # Without approval (for all branches except staging)
          - run:
              context: org-global
              filters:
                branches: { ignore: 'staging' } # All branches except staging
                tags: { ignore: '/.*/' }        # Ignore all tags
          # With approval (only for tags and staging branch)
          - run-with-approval:
              context: org-global
              filters:
                tags: { only: '/.*/' }          # All branches and all tags
              requires: ['approve']             # But requires approval (which is filtering)
          - approve:
              type: approval
              filters:
                branches: { only: 'staging' }   # Ignore all branches except staging
                tags: { only: '/.*/' }          # All tags
    

    我希望这会有所帮助

        2
  •  2
  •   Yves M. Coder_Naveed    5 年前

    用最新的答案更新此问题: CircleCI在预览中有一个v2 API(以支持CircleCI 2.1),除其他外,它支持条件工作流(即条件保持步骤)

    conditional workflow formatting

    - when:
        condition: << pipeline.parameters.test >>
        steps:
          - hold-step