Docker

Release Process

Процесс выкатки новой версии clowbot: от кода до продакшена. Включает тестирование, деплой, smoke tests и rollback.

Release Pipeline

1. Code
2. Build
3. Test
4. Tag
5. Deploy
6. Smoke
При провале на любом шаге — откат на предыдущую версию

Детальные шаги

1. Code

Разработка в feature branch, code review, локальные тесты

Действия:

  • Создать feature branch от main
  • Разработка с тестами
  • Code review через PR
  • Все тесты проходят локально

Команды:

git checkout -b feature/new-agent
# ... разработка ...
pytest bot/tests/
git push origin feature/new-agent

2. Build

Сборка Docker образов для всех сервисов

Действия:

  • Сборка bot образа
  • Сборка postgres образа (если миграции)
  • Проверка размера образов
  • Тегирование для registry

Команды:

docker compose build bot
docker compose build postgres  # если изменились миграции
docker images | grep clowbot

3. Test

Unit tests, integration tests, smoke tests

Действия:

  • Unit tests: pytest
  • Integration tests: DB + API
  • Smoke tests: базовые сценарии
  • E2E scenarios в Telegram test group

Команды:

pytest bot/tests/ -v
./scripts/smoke_test.sh
curl http://localhost:8000/health

4. Tag

Версионирование по SemVer, обновление changelog

Действия:

  • Определить версию по SemVer
  • Обновить RELEASE_VERSION в .env
  • Обновить CHANGELOG.md
  • Создать git tag

Команды:

# MAJOR.MINOR.PATCH
# v0.8.0 → v0.8.1 (patch)
# v0.8.0 → v0.9.0 (minor)
# v0.8.0 → v1.0.0 (major)

echo "RELEASE_VERSION=v0.9.0" >> .env
git tag -a v0.9.0 -m "Release v0.9.0"

5. Deploy

Развёртывание на production сервере

Действия:

  • Pull новых образов
  • Остановка старых контейнеров
  • Запуск новых контейнеров
  • Проверка health checks

Команды:

# На production сервере
docker compose pull
docker compose up -d
docker compose ps
docker compose logs -f bot

6. Smoke

Проверка работоспособности после деплоя

Действия:

  • Bot отвечает на /start
  • DB queries работают
  • n8n webhooks отвечают
  • LLM отвечает на запросы

Команды:

# В Telegram: /start
curl http://localhost:5678/healthz
curl http://localhost:11434/api/tags
psql -c "SELECT count(*) FROM clowbot.users;"

SemVer Versioning

MAJOR

Breaking changes. Необратимые изменения API.

v0.8.0 → v1.0.0
MINOR

Новые фичи. Backward compatible.

v0.8.0 → v0.9.0
PATCH

Bug fixes. Small improvements.

v0.8.0 → v0.8.1
# Текущая версия в .env
RELEASE_VERSION=v0.8.0

# Patch release (bug fix)
RELEASE_VERSION=v0.8.1

# Minor release (new feature)
RELEASE_VERSION=v0.9.0

# Major release (breaking change)
RELEASE_VERSION=v1.0.0

Smoke Tests

Базовые проверки после каждого деплоя. Все тесты должны пройти.

Bot responds
/start в Telegram
Health check
curl localhost:8000/health
DB queries
SELECT count(*) FROM users
n8n webhooks
curl localhost:5678/healthz
LLM works
curl ollama:11434/api/generate
Prometheus
curl localhost:9090/-/healthy

Rollback Scenarios

Контейнер падает

Перезапуск контейнера без отката версии

docker compose restart bot

Миграция сломала схему

Только если нет другого выхода

Откат миграции вручную (ОСТОРОЖНО)

Новый код не работает

Откат на предыдущую версию

git checkout tags/v0.8.0 && docker compose up -d --build

Конфиг сломан

Проверить все переменные окружения

Восстановить .env из backup

Pre-release Checklist

Все тесты проходят
Миграции протестированы на пустой БД
CHANGELOG.md обновлён
RELEASE_VERSION в .env обновлён
Smoke tests пройдены
Документация обновлена
Backups созданы
Rollback план готов

Связанные страницы