Короткий ответ
Автоматическая джоба деплоя запускается сама сразу после успешного прохождения предыдущих стадий; ручная (`when: manual` в GitLab CI или approval-джоба в GitHub Actions/Environments) ждёт, пока человек явно нажмёт кнопку запуска — это полезно для production, когда нужен контроль момента выкладки или дополнительное подтверждение.
Как это работает подробнее
ручной шаг не убирает автоматизацию самого процесса деплоя — скрипт выполняется так же, как при автоматическом запуске, разница только в триггере: ожидание действия человека вместо автоматического продолжения пайплайна.
Пример кода
example.yaml
deploy_prod:
stage: deploy
script: ./deploy.sh prod
when: manual
environment:
name: production
only:
- mainЧто использовать на практике
- На практике. ручной approve для прода часто сочетают с выбором времени релиза (не в пятницу вечером, не во время пиковой нагрузки), с дополнительной проверкой чеклиста перед выкладкой или с требованиями комплаенса (например, подтверждение от уполномоченного сотрудника). Для dev/staging обычно автоматический деплой, чтобы быстрее получать обратную связь.
- Пример. Ожидаемое поведение: после успешного прохождения тестов на ветке `main` джоба `deploy_prod` появляется в пайплайне в состоянии «ожидает запуска» и не выполняется, пока ответственный сотрудник не нажмёт кнопку Play в интерфейсе GitLab.
Подводные камни
- Частые ошибки. делают ручными все стадии, включая staging, что замедляет цикл обратной связи без реальной пользы; либо наоборот — автоматизируют прод-деплой там, где организационно требуется контролируемое окно релиза, и потом сталкиваются с неожиданными выкладками.