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Шифрует артефакты
CЗапускает тесты повторно
DСтавит job на паузу до ручного одобрения назначенным человеком
2. Зачем job привязывают к environment: production?
AЧтобы он получил секреты/переменные этого окружения и подчинялся его правилам защиты
BЧтобы job работал быстрее
CЧтобы отключить логи
DЧтобы пропустить checkout
3. Какой паттерн типичен для двух окружений?
AКатить на оба только вручную
BАвтодеплой на staging при push в main и деплой на production только после ручного апрува
CНикогда не использовать staging
DДеплоить на production на каждый коммит без проверок