Как сделать условное ручное утверждение в рабочих процессах CircleCI 2.0
У меня есть простой случай использования, когда я хочу сделать ручное утверждение только для определенной ветви и / или тега.
Рабочий процесс с type:approval
имеет фильтры, как и все другие задания, но задание foo, требующее одобрения вручную (или нет), будет использовать requires: ['approve']
а потом сильно связан с этим.
Это означает, что foo никогда не произойдет, если шаг утверждения не соответствует фильтру.
Итак... любой чистый обходной путь, без большого количества дубликатов в файле yaml?
Изменить: тот же вопрос на CircleCI Обсудить
1 ответ
Использование карты псевдонимов YAML
Это своего рода хак, но с картой псевдонимов 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
Я надеюсь, что это поможет
Обновление этого вопроса более свежим ответом: CircleCI имеет предварительную версию API v2 (для поддержки CircleCI 2.1), который поддерживает, среди прочего, условные рабочие процессы (т.е. этап условного удержания)
условное форматирование рабочего процесса
- when:
condition: << pipeline.parameters.test >>
steps:
- hold-step