Глава 12: Развёртывание¶
Аудитория: DevOps, платформенные инженеры
CI/CD-конвейер¶
Push to unified-platform
│
▼
build-and-push.yml (automatic)
├── Run contract & recovery tests
├── Build API image
├── Build Dashboard image
└── Push to Artifact Registry
│
▼ (manual trigger)
deploy.yml (workflow_dispatch)
├── SSH into VM via IAP tunnel
├── git pull on VM
├── docker compose pull (prebuilt images)
├── docker compose up -d --force-recreate
├── Health check (60s wait + curl localhost:8000/health)
└── Post-deploy contract check
Почему развёртывание запускается вручную¶
Автоматическое развёртывание при пуше было отключено после инцидента в январе 2026 года, когда автоматические деплои конкурировали с ручными SSH-деплоями, что привело к повреждению контейнеров и потере данных. Теперь для запуска развёртывания необходимо:
- Ручной запуск через интерфейс GitHub Actions («Run workflow»)
- Явный выбор целевого окружения (staging или production)
- Ввод
DEPLOYдля подтверждения - Необязательное поле с причиной для журнала аудита
Теги образов¶
Образы помечаются коротким SHA коммита: sha-XXXXXXX. На этапе развёртывания используется GITHUB_SHA для формирования тега, поэтому развёрнутая версия всегда соответствует конкретному коммиту.
Как выполнить развёртывание¶
- Убедитесь, что сборка прошла успешно:
gh run list --workflow=build-and-push.yml --limit=1 - Запустите развёртывание:
gh workflow run deploy.yml \ --ref unified-platform \ -f target=production \ -f confirm=DEPLOY \ -f reason="your reason here" - Отслеживайте выполнение:
gh run watch <run_id> --exit-status - Проверьте результат:
curl -sS https://scan.rtb.cat/api/health | jq -r '.git_sha,.version'
Проверка развёртывания¶
Эндпоинт /api/health возвращает:
{
"git_sha": "94e9cbb0",
"version": "sha-94e9cbb"
}
Сравните git_sha с SHA коммита, который вы планировали развернуть.
Проверка контрактов после развёртывания¶
После развёртывания рабочий процесс запускает scripts/contracts_check.py внутри API-контейнера. Скрипт проверяет соблюдение контрактов данных (неизменных правил от импорта до вывода через API). Если проверка не пройдена:
- При
ALLOW_CONTRACT_FAILURE=false(по умолчанию): развёртывание помечается как неуспешное. - При
ALLOW_CONTRACT_FAILURE=true(временный обход): развёртывание считается успешным, но выводится предупреждение. Этот обход необходимо убрать после расследования.
Staging и production¶
| Окружение | Имя ВМ | Домен |
|---|---|---|
| Staging | catscan-production-sg2 |
(внутренний) |
| Production | catscan-production-sg |
scan.rtb.cat |
Сначала разверните на staging, проверьте, затем разверните на production.
Откат¶
Чтобы выполнить откат, разверните предыдущий заведомо рабочий коммит:
- Определите последний рабочий SHA из git log или предыдущих запусков развёртывания.
- Переключитесь на этот SHA в ветке unified-platform (или используйте
--refс нужным коммитом). - Запустите рабочий процесс развёртывания.
Специального механизма отката нет — это просто развёртывание более старой версии.
Связанные разделы¶
- Обзор архитектуры: что именно развёртывается
- Мониторинг состояния: проверка успешности развёртывания