如何在 CircleCI 2.0 工作流程中进行有条件的手动批准
How to make a conditional manual approval in CircleCI 2.0 workflows
我有一个简单的用例,我只想为特定分支 and/or 标记制作 manual approval。
具有 type:approval
的工作流程作业与所有其他作业一样具有过滤器,但需要(或不需要)手动批准的作业 foo 将使用类似 requires: ['approve']
然后与它有很强的联系。
这意味着如果批准步骤与过滤器不匹配,foo 将永远不会发生。
所以.. 有什么干净的解决方法,yaml 文件中没有很多重复项吗?
使用YAML alias map
这是一种 hack,但在 YAML alias map 中,您可以重复使用步骤并创建两个具有不同过滤器的独立工作流路径:一个经过批准,另一个没有。
这是一个完整的例子:
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
希望对您有所帮助
用更新的答案更新这个问题:
CircleCI 在预览版中有一个 v2 API(以支持 CircleCI 2.1),它支持条件工作流(即条件保持步骤)
conditional workflow formatting
- when:
condition: << pipeline.parameters.test >>
steps:
- hold-step
我有一个简单的用例,我只想为特定分支 and/or 标记制作 manual approval。
具有 type:approval
的工作流程作业与所有其他作业一样具有过滤器,但需要(或不需要)手动批准的作业 foo 将使用类似 requires: ['approve']
然后与它有很强的联系。
这意味着如果批准步骤与过滤器不匹配,foo 将永远不会发生。
所以.. 有什么干净的解决方法,yaml 文件中没有很多重复项吗?
使用YAML alias map
这是一种 hack,但在 YAML alias map 中,您可以重复使用步骤并创建两个具有不同过滤器的独立工作流路径:一个经过批准,另一个没有。
这是一个完整的例子:
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
希望对您有所帮助
用更新的答案更新这个问题: CircleCI 在预览版中有一个 v2 API(以支持 CircleCI 2.1),它支持条件工作流(即条件保持步骤)
conditional workflow formatting
- when:
condition: << pipeline.parameters.test >>
steps:
- hold-step