Ответ
Manual job (задание с ручным запуском) — это стандартная практика для контролируемого деплоя на прод или выполнения опасных операций. Я настраиваю их через директиву when: manual.
Базовая конфигурация:
# .gitlab-ci.yml
stages:
- test
- deploy
deploy_to_production:
stage: deploy
script:
- echo "Starting deployment to production..."
- ./scripts/deploy-prod.sh
when: manual # Ключевая директива
rules:
- if: $CI_COMMIT_BRANCH == "main" # Разрешаем запуск только из main
Расширенные сценарии:
-
Job с зависимостями: Manual job может ждать завершения предыдущих автоматических стадий.
deploy_to_production: stage: deploy script: ./deploy.sh when: manual needs: ["run-integration-tests"] # Запустится только после успеха тестов -
Защищенные окружения с ручным подтверждением:
deploy: stage: deploy script: ./deploy.sh environment: name: production url: https://myapp.com when: manual only: - mainВ интерфейсе GitLab для такого job появится кнопка с иконкой "play". Перед запуском можно добавить дополнительные переменные.
-
Блокировка пайплайна (Pipeline-level manual job): Иногда нужно, чтобы весь пайплайн останавливался и ждал ручного действия.
manual_approval: stage: approve script: - echo "Менеджер, проверь и нажми Deploy!" when: manual allow_failure: false # Пайплайн не пройдет, если job не запущен
Из практики: Я часто использую manual job для deploy_to_staging (после merge в develop) и deploy_to_prod (после merge в main). Это создает четкий и контролируемый процесс выпуска изменений.