Environments и ручные апрувы

Ставим «шлагбаум» перед продом — выкладка только с одобрения.

Environment — именованное окружение деплоя (например, staging или production) со своими секретами, переменными и правилами защиты.

Зачем окружения

Окружения решают три задачи разом: хранят отдельные секреты/переменные на стенд, дают защиту (кто и когда может катить) и красиво показывают историю деплоев в интерфейсе GitHub. Это мост между «непрерывной доставкой» и «непрерывным деплоем».

Привязка job к окружению

jobs:
  deploy:
    runs-on: ubuntu-latest
    environment:
      name: production
      url: https://example.com
    steps:
      - run: echo "Катим на прод"

Поле url добавляет в интерфейс ссылку на задеплоенный сайт. Job автоматически получает доступ к секретам и переменным окружения production.

Required reviewers: ручной апрув

В Settings → Environments → production можно включить Required reviewers. Тогда job, привязанный к этому окружению, встаёт на паузу и ждёт, пока назначенный человек нажмёт Approve. Это и есть ручной шаг непрерывной доставки: CI прошёл, артефакт готов, но на прод выпускает человек.

Дополнительные правила защиты окружения:

ПравилоЧто делает
Required reviewersтребует одобрения 1–6 человек перед запуском job
Wait timerзадержка перед деплоем (окно «передумать»)
Deployment branchesкатить на это окружение можно только из разрешённых веток/тегов

Типичная связка двух окружений

Распространённый паттерн: на каждый push в main автоматически катим на staging (без апрува), а на production — только после ручного одобрения. Так быстрые изменения сразу видны на стенде, а прод защищён человеком.

Итог

  • Environment хранит секреты/переменные стенда и правила защиты.
  • Required reviewers ставит job на паузу до ручного апрува — основа continuous delivery.
  • Wait timer и deployment branches дают дополнительный контроль над выкладкой.
Проверьте себя
1. Что даёт настройка Required reviewers у environment?
AУскоряет деплой
BСтавит job на паузу до ручного одобрения назначенным человеком
CШифрует артефакты
DЗапускает тесты повторно
2. Зачем job привязывают к environment: production?
AЧтобы job работал быстрее
BЧтобы он получил секреты/переменные этого окружения и подчинялся его правилам защиты
CЧтобы отключить логи
DЧтобы пропустить checkout
3. Какой паттерн типичен для двух окружений?
AКатить на оба только вручную
BАвтодеплой на staging при push в main и деплой на production только после ручного апрува
CНикогда не использовать staging
DДеплоить на production на каждый коммит без проверок
Поддержать проект