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.0MINOR
Новые фичи. Backward compatible.
v0.8.0 → v0.9.0PATCH
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 в TelegramHealth check
curl localhost:8000/healthDB queries
SELECT count(*) FROM usersn8n webhooks
curl localhost:5678/healthzLLM works
curl ollama:11434/api/generatePrometheus
curl localhost:9090/-/healthyRollback 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 план готов