feat(staging): add orchestrator deploy hook with health-check and auto-rollback (ORCH-34)
This commit is contained in:
90
docs/DEPLOY_HOOK.md
Normal file
90
docs/DEPLOY_HOOK.md
Normal file
@@ -0,0 +1,90 @@
|
||||
# Orchestrator Deploy Hook
|
||||
|
||||
`scripts/orchestrator-deploy-hook.sh` — хост-скрипт деплоя orchestrator с health-чеком и авто-rollback.
|
||||
|
||||
## Как работает
|
||||
|
||||
### Режим `--deploy` (по умолчанию)
|
||||
|
||||
1. **Захват текущего образа** — до рестарта записывает ID образа работающего контейнера в `$PREV_IMAGE_FILE` (best-effort, не падает если сервис не запущен).
|
||||
2. **git pull** — обновляет код репозитория.
|
||||
3. **Рестарт контейнера** — `docker compose --profile $COMPOSE_PROFILE up -d --no-build $TARGET_SERVICE`.
|
||||
4. **Health-цикл** — 10 попыток × 6с = до 60с. Критерий: HTTP 200 + тело содержит `"status":"ok"`.
|
||||
- **Успех** → `exit 0`, лог "Deploy SUCCESS".
|
||||
- **Провал** → авто-rollback (шаг 5).
|
||||
5. **Авто-rollback** — восстанавливает образ из `$PREV_IMAGE_FILE`, рестарт, повторный health 5×3с.
|
||||
- Если восстановился → `exit 1` (деплой провалился, откат успешен).
|
||||
- Если и откат не помог → `exit 2` (критично).
|
||||
|
||||
### Режим `--rollback`
|
||||
|
||||
Вручную откатывает сервис на предыдущий образ из `$PREV_IMAGE_FILE`.
|
||||
|
||||
## Переменные окружения
|
||||
|
||||
| Переменная | Дефолт | Описание |
|
||||
|------------------|-----------------------------------|-----------------------------------------------|
|
||||
| `TARGET_SERVICE` | `orchestrator-staging` | Имя docker-compose сервиса |
|
||||
| `TARGET_PORT` | `8501` | Порт health-check |
|
||||
| `TARGET_IMAGE` | `orchestrator-orchestrator-staging` | Имя образа для retag при rollback |
|
||||
| `COMPOSE_PROFILE`| `staging` | Docker compose profile (пусто = без профиля) |
|
||||
| `PREV_IMAGE_FILE`| `$REPO/.deploy-prev-image-staging`| Файл для сохранения предыдущего образа |
|
||||
| `LOG` | `/var/log/orchestrator/deploy-hook.log` | Лог-файл (fallback: `$REPO/deploy-hook.log`) |
|
||||
|
||||
> ⚠️ **Дефолт — всегда STAGING**. Прод активируется только явным переопределением env.
|
||||
|
||||
## Примеры запуска
|
||||
|
||||
### Staging (дефолт, безопасно)
|
||||
|
||||
```bash
|
||||
cd /home/slin/repos/orchestrator
|
||||
bash scripts/orchestrator-deploy-hook.sh --deploy
|
||||
# или просто:
|
||||
bash scripts/orchestrator-deploy-hook.sh
|
||||
```
|
||||
|
||||
### Прод (осознанный шаг, Этап 5)
|
||||
|
||||
```bash
|
||||
TARGET_SERVICE=orchestrator \
|
||||
TARGET_PORT=8500 \
|
||||
TARGET_IMAGE=orchestrator-orchestrator \
|
||||
COMPOSE_PROFILE="" \
|
||||
PREV_IMAGE_FILE=/home/slin/repos/orchestrator/.deploy-prev-image-prod \
|
||||
bash scripts/orchestrator-deploy-hook.sh --deploy
|
||||
```
|
||||
|
||||
### Ручной rollback staging
|
||||
|
||||
```bash
|
||||
bash scripts/orchestrator-deploy-hook.sh --rollback
|
||||
```
|
||||
|
||||
## Коды выхода
|
||||
|
||||
| Код | Значение |
|
||||
|-----|------------------------------------------------------|
|
||||
| `0` | Деплой успешен, сервис здоров |
|
||||
| `1` | Деплой провалился; откат выполнен (или пропущен) |
|
||||
| `2` | Деплой провалился И откат тоже провалился (критично) |
|
||||
|
||||
## Логи
|
||||
|
||||
```
|
||||
/var/log/orchestrator/deploy-hook.log
|
||||
```
|
||||
|
||||
Каждая строка с UTC-таймстампом в формате `[2026-06-05T06:30:00Z]`.
|
||||
|
||||
## Разница с enduro-deploy-hook.sh
|
||||
|
||||
| Функция | enduro-deploy-hook.sh | orchestrator-deploy-hook.sh |
|
||||
|----------------------|-----------------------|-----------------------------|
|
||||
| Захват PREV_IMG | ✅ | ✅ |
|
||||
| git pull | ✅ | ✅ |
|
||||
| Рестарт | ✅ | ✅ |
|
||||
| Health-цикл (60с) | ❌ | ✅ 10×6с |
|
||||
| Авто-rollback | ❌ | ✅ |
|
||||
| Параметризация (env) | ❌ хардкод | ✅ дефолт=staging |
|
||||
| Compose profile | ❌ | ✅ --profile staging |
|
||||
Reference in New Issue
Block a user