Короткий ответ
Нужно настроить protected environment с обязательными reviewers (например, GitHub Environments с required reviewers или GitLab protected environment с deployment approval rules), запретив автору merge request подтверждать собственный деплой, и логировать, кто и когда дал подтверждение, для последующего аудита.
Как это работает подробнее
современные CI-системы поддерживают привязку окружения (environment) к списку пользователей или групп, чьё подтверждение требуется перед тем, как джоба деплоя в это окружение начнёт выполняться; автор PR по умолчанию может быть исключён из списка валидных approver'ов для собственного изменения, обеспечивая разделение обязанностей (segregation of duties).
Пример кода
example.yaml
# GitHub Environment "production" настроен с Required reviewers: @release-managers
deploy_prod:
runs-on: ubuntu-latest
environment:
name: production
steps:
- run: ./deploy.sh prodЧто использовать на практике
- На практике. это особенно важно в регулируемых средах, где требуется, чтобы деплой в прод подтверждал кто-то, кроме автора кода — снижает риск как случайных, так и намеренных злоупотреблений. Такие approval'ы стоит сопровождать краткой информацией о том, что именно будет задеплоено (changelog, diff, результаты тестов на staging), чтобы подтверждение было осмысленным, а не формальной кнопкой.
- Пример. Ожидаемое поведение: workflow run останавливается на шаге деплоя со статусом «Waiting for approval», и становится доступным для продолжения только пользователю из группы `release-managers`, отличному от автора PR; факт и время подтверждения фиксируются в истории workflow run.
Подводные камни
- Частые ошибки. настраивают approval gate, но оставляют автора изменения в списке допустимых approver'ов, из-за чего контроль становится формальностью; не логируют, кто подтвердил деплой, что затрудняет расследование инцидентов и аудит соответствия требованиям.