| name | deploy-test |
| description | Автоматизированный деплой на тестовый сервер budget-test |
| version | 1.0.0 |
| author | Family Budget Team |
| tags | deployment, automation, testing, ssh, budget-test |
| dependencies | deployment, monitoring |
Deploy Test Automation Skill
Автоматизирует весь процесс деплоя на тестовый сервер budget-test с полным анализом логов и проверкой состояния.
Когда использовать этот скил
Используй этот скил когда нужно:
- Задеплоить изменения на тестовый сервер budget-test
- Обновить код на тестовом сервере
- Проверить работу изменений в тестовой среде
- Автоматически проанализировать логи после деплоя
- Проверить состояние контейнеров после деплоя
Скил автоматически вызывается при запросах типа:
- "Задеплой на тестовый сервер"
- "Обновить код на budget-test"
- "Запусти deploy-test"
- "Сделай деплой на test"
- "Проверь изменения на тестовом сервере"
Алгоритм работы
Этот skill выполняет следующие шаги автоматически:
Шаг 1: Проверка SSH подключения
ssh budget-test "echo 'Connection OK'"
Что проверяется:
- SSH ключи настроены
- Сервер доступен
- Права доступа корректны
При ошибке:
- Предложить пользователю проверить SSH ключи
- Показать команду для ручного подключения
Шаг 2: Git pull в ветке test
ssh budget-test "cd ~/familyBudget && git fetch --all && git checkout test && git pull origin test"
Что проверяется:
- Ветка test существует
- Нет незакоммиченных изменений
- Pull прошел успешно
При ошибке:
- Показать статус git
- Предложить решение конфликтов
- Дать команды для ручного исправления
Шаг 3: Запуск deploy.sh
ssh budget-test "cd ~/familyBudget && sudo bash deploy.sh --sync-mode update --cleanup-mode smart --patch"
Параметры:
--sync-mode update- только обновление/добавление файлов (безопасно)--cleanup-mode smart- умная очистка старых образов--patch- быстрый патч-деплой (2-5 минут)
Что происходит:
- Синхронизация кода в /opt/budget
- Пересборка Docker образов (если нужно)
- Перезапуск контейнеров
- Health checks
Шаг 4: Анализ логов деплоя
ssh budget-test "tail -100 /opt/budget/logs/deploy.log"
Что анализируется:
- Успешность синхронизации
- Ошибки при сборке образов
- Статус запуска контейнеров
- Health check результаты
Паттерны ошибок:
ERROR- критические ошибкиFAILED- неудачные операцииfatal- фатальные ошибкиPermission denied- проблемы с правами
Шаг 5: Анализ логов контейнеров
# Backend
ssh budget-test "cd /opt/budget && docker compose logs backend --tail=50"
# PostgreSQL
ssh budget-test "cd /opt/budget && docker compose logs postgres --tail=50"
# Redis
ssh budget-test "cd /opt/budget && docker compose logs redis --tail=50"
Что анализируется:
- Python exceptions и tracebacks
- Database connection errors
- Redis connection issues
- Application startup errors
Паттерны ошибок:
Traceback- Python исключенияERROR- ошибки приложенияException- необработанные исключенияConnectionError- проблемы с подключением
Шаг 6: Проверка статуса контейнеров
ssh budget-test "cd /opt/budget && docker compose ps --format json"
Что проверяется:
- Все контейнеры running
- Health status = healthy
- Нет exited или restarting контейнеров
При проблемах:
- Показать unhealthy контейнеры
- Предложить перезапуск
- Показать логи проблемных контейнеров
Шаг 7: Проверка запущенных процессов
ssh budget-test "ps aux | grep -E 'deploy|docker|npm|node' | grep -v grep"
Что проверяется:
- Нет зависших процессов деплоя
- Нет дублирующихся процессов
- Все процессы завершились корректно
Признаки проблем:
- Процессы старше 5 минут
- Множество одинаковых процессов
- Зависшие npm/node процессы
Обработка ошибок и автоисправление
Ошибка: SSH подключение не удается
Действия:
- Показать пользователю ошибку
- Предложить проверить:
ssh-add -l- список ключейssh budget-test- ручное подключение
- Дать инструкцию по настройке SSH
Ошибка: Git pull завершился с конфликтами
Действия:
- Показать конфликтующие файлы
- Предложить варианты:
- Stash изменений на сервере
- Hard reset на сервере (если тестовая среда)
- Разрешить конфликты вручную
- Дать команды для исправления
Ошибка: Deploy.sh завершился с ошибкой
Действия:
- Извлечь конкретную ошибку из логов
- Анализировать причину:
- Проблемы с правами
- Недостаток места на диске
- Ошибки Docker
- Проблемы с сетью
- Предложить решение
- Если возможно - исправить автоматически
Ошибка: Контейнеры unhealthy
Автоисправление:
# Перезапуск unhealthy контейнеров
ssh budget-test "cd /opt/budget && docker compose restart <service>"
Если не помогло:
- Показать логи контейнера
- Проверить health endpoint
- Предложить полный перезапуск
- Проверить dependencies (postgres, redis)
Ошибка: Зависшие процессы
Автоисправление:
# Завершить зависшие процессы (только если >5 минут)
ssh budget-test "pkill -9 -f '<process_name>'"
Осторожно:
- Не убивать активные процессы
- Проверить что процесс действительно завис
- Показать какие процессы будут завершены
Отчет после деплоя
После завершения всех шагов, скил создает структурированный отчет:
✅ Успешный деплой
========================================
✅ Деплой на budget-test завершен успешно
========================================
📊 Статус выполнения:
✅ SSH подключение установлено
✅ Git pull выполнен успешно
✅ Deploy.sh завершен без ошибок
✅ Логи деплоя чистые
✅ Все контейнеры healthy
✅ Нет зависших процессов
🐳 Статус контейнеров:
✅ backend: running (healthy)
✅ postgres: running (healthy)
✅ redis: running (healthy)
📝 Важные логи:
- /opt/budget/logs/deploy.log - последние 20 строк
⏱️ Время деплоя: 3м 24с
⚠️ Деплой с предупреждениями
========================================
⚠️ Деплой на budget-test завершен с предупреждениями
========================================
📊 Статус выполнения:
✅ SSH подключение установлено
✅ Git pull выполнен успешно
✅ Deploy.sh завершен без ошибок
⚠️ Обнаружены warnings в логах backend
✅ Все контейнеры healthy
✅ Нет зависших процессов
⚠️ Предупреждения:
1. Backend logs (backend/app/main.py:45):
WARNING: Redis connection slow (234ms)
2. Postgres logs:
WARNING: High connection count (85/100)
📝 Рекомендации:
- Проверить Redis performance
- Мониторить connection pool
⏱️ Время деплоя: 4м 12с
❌ Деплой с ошибками
========================================
❌ Деплой на budget-test завершился с ошибками
========================================
📊 Статус выполнения:
✅ SSH подключение установлено
✅ Git pull выполнен успешно
❌ Deploy.sh завершился с ошибкой
❌ Backend контейнер unhealthy
✅ Нет зависших процессов
❌ Критические ошибки:
1. Deploy.sh error (код: 1):
Error: Failed to start backend container
2. Backend container (unhealthy):
ERROR: Database connection refused
Connection to postgres:5432 failed
🔧 Действия для исправления:
1. Проверить PostgreSQL:
ssh budget-test "cd /opt/budget && docker compose logs postgres"
2. Проверить сетевое подключение:
ssh budget-test "cd /opt/budget && docker compose exec backend ping postgres"
3. Перезапустить PostgreSQL:
ssh budget-test "cd /opt/budget && docker compose restart postgres"
4. Повторить деплой после исправления
⏱️ Время деплоя: 2м 48с (прерван)
Сохранение логов
Все логи автоматически сохраняются локально для анализа:
logs/deploy-test/
├── YYYYMMDD_HHMMSS/
│ ├── 01_ssh_check.log # SSH проверка
│ ├── 02_git_pull.log # Git pull вывод
│ ├── 03_deploy.log # Deploy.sh вывод
│ ├── 04_deploy_server.log # /opt/budget/logs/deploy.log
│ ├── 05_backend_logs.log # Backend контейнер
│ ├── 06_postgres_logs.log # Postgres контейнер
│ ├── 07_redis_logs.log # Redis контейнер
│ ├── 08_container_status.json # Статус контейнеров
│ ├── 09_processes.log # Запущенные процессы
│ └── summary.md # Итоговый отчет
Интеграция с другими скилами
Используются:
- deployment - базовые команды деплоя
- monitoring - анализ логов и метрик
Вызывается автоматически:
- При фразах "задеплой на тестовый сервер"
- Из других скилов при тестировании изменений
Примеры использования
Пример 1: Простой деплой
Пользователь: "Задеплой на тестовый сервер"
Claude:
1. Проверяю SSH подключение... ✅
2. Выполняю git pull... ✅
3. Запускаю deploy.sh... ✅
4. Анализирую логи... ✅
5. Проверяю контейнеры... ✅
6. Проверяю процессы... ✅
✅ Деплой завершен успешно! Все сервисы работают корректно.
Пример 2: Деплой с ошибкой и исправлением
Пользователь: "Обновить код на budget-test"
Claude:
1. Проверяю SSH подключение... ✅
2. Выполняю git pull... ✅
3. Запускаю deploy.sh... ✅
4. Анализирую логи... ⚠️ Обнаружена ошибка
5. Проверяю контейнеры... ❌ Backend unhealthy
❌ Проблема: Backend container unhealthy
Причина: Database connection refused
🔧 Исправляю автоматически:
- Перезапускаю PostgreSQL... ✅
- Перезапускаю Backend... ✅
- Проверяю health... ✅
✅ Проблема исправлена! Все сервисы работают.
Пример 3: Множественные проблемы
Пользователь: "Сделай деплой на test"
Claude:
1. Проверяю SSH подключение... ✅
2. Выполняю git pull... ❌ Конфликт
⚠️ Обнаружен конфликт в файле: backend/app/config.py
Предлагаю решения:
1. Stash изменения на сервере (рекомендую)
2. Hard reset (удалит локальные изменения)
3. Разрешить вручную
Выбери вариант или я использую вариант 1?
Best Practices
1. Всегда проверяй состояние перед действиями
- SSH подключение перед git pull
- Git статус перед pull
- Контейнеры перед перезапуском
2. Детальное логирование
- Сохраняй все выводы команд
- Timestamp для каждого действия
- Структурированные отчеты
3. Безопасное исправление
- Не убивай процессы без подтверждения
- Не делай hard reset без предупреждения
- Предлагай варианты вместо автоматических действий
4. Информативная обратная связь
- Эмодзи для визуального статуса (✅ ⚠️ ❌)
- Прогресс выполнения в реальном времени
- Понятные сообщения об ошибках
- Конкретные команды для исправления
Troubleshooting
См. deployment/SKILL.md для общих проблем деплоя.
Специфичные для deploy-test проблемы:
SSH timeout
Причина: Сервер недоступен или долго отвечает Решение: Увеличить timeout, проверить сеть
Git pull зависает
Причина: Большой размер изменений или медленная сеть
Решение: Использовать --depth 1 для shallow pull
Deploy.sh зависает
Причина: Docker операции долго выполняются Решение: Увеличить timeout, мониторить процессы
Связанные скилы
- deployment - базовый deployment
- monitoring - мониторинг сервисов
- testing - тестирование перед деплоем