# MC Panel CI/CD Pipeline ## Обзор Проект использует Drone CI для автоматизации сборки, тестирования и деплоя. Pipeline состоит из нескольких этапов: 1. **Code Quality** - проверка качества кода и безопасности 2. **Build Frontend** - сборка React приложения 3. **Build and Publish** - сборка и публикация Docker образа 4. **Deploy Staging** - автоматический деплой на staging (ветка develop) 5. **Deploy Production** - деплой на production (теги v*) 6. **Notify** - уведомления о результатах ## Структура Pipeline ### 1. Code Quality Pipeline ```yaml Триггеры: push, pull_request Шаги: - python-lint: flake8, black, isort - frontend-lint: TypeScript, ESLint - python-tests: pytest с покрытием - frontend-tests: Vitest/Jest - python-security: safety, bandit - frontend-security: npm audit ``` ### 2. Build Frontend Pipeline ```yaml Триггеры: push, tag (main/master/develop) Зависимости: code-quality Шаги: - build-frontend: npm ci && npm run build - save-frontend-artifacts: сохранение артефактов ``` ### 3. Build and Publish Pipeline ```yaml Триггеры: push, tag (main/master/develop) Зависимости: code-quality, build-frontend Шаги: - build-and-push: Docker build и push в registry - test-image: тестирование собранного образа - scan-image: Trivy сканирование уязвимостей ``` ### 4. Deploy Pipelines ```yaml Staging: Триггер: push в develop Деплой: docker-compose.staging.yml Production: Триггер: tag v* Деплой: docker-compose.prod.yml ``` ## Настройка Secrets В Drone необходимо настроить следующие секреты: ### Docker Registry ``` docker_username: логин для registry.nevetime.ru docker_password: пароль для registry.nevetime.ru ``` ### SSH для деплоя ``` staging_host: IP/домен staging сервера staging_user: пользователь SSH staging_ssh_key: приватный SSH ключ (base64) production_host: IP/домен production сервера production_user: пользователь SSH production_ssh_key: приватный SSH ключ (base64) ``` ### Уведомления ``` telegram_bot_token: токен Telegram бота telegram_chat_id: ID чата для уведомлений ``` ## Теги и версионирование ### Автоматические теги - `latest` - последний коммит в main/master - `develop` - последний коммит в develop - `{commit-sha}` - короткий хеш коммита ### Релизные теги - `v1.0.0` - семантическое версионирование - `v1.0.0-rc.1` - release candidate ## Окружения ### Development - Локальная разработка - `docker-compose.yml` ### Staging - Автоматический деплой из develop - `docker-compose.staging.yml` - URL: https://mc-panel-staging.nevetime.ru ### Production - Деплой по тегам v* - `docker-compose.prod.yml` - URL: https://mc-panel.nevetime.ru ## Workflow ### Разработка новой функции 1. Создать ветку от develop: `git checkout -b feature/new-feature` 2. Разработать функцию 3. Создать Pull Request в develop 4. После прохождения CI и ревью - мерж в develop 5. Автоматический деплой на staging ### Релиз 1. Создать ветку release от develop: `git checkout -b release/v1.0.0` 2. Подготовить релиз (обновить версии, CHANGELOG) 3. Мерж в main и develop 4. Создать тег: `git tag v1.0.0` 5. Push тега: `git push origin v1.0.0` 6. Автоматический деплой на production ### Hotfix 1. Создать ветку от main: `git checkout -b hotfix/critical-fix` 2. Исправить проблему 3. Мерж в main и develop 4. Создать тег с патч-версией: `git tag v1.0.1` 5. Push тега для деплоя ## Мониторинг ### Логи сборки ```bash # Просмотр логов в Drone UI https://drone.nevetime.ru/your-org/mc-panel # Локальные логи docker-compose logs -f mc-panel ``` ### Метрики - Время сборки - Размер образа - Результаты тестов - Покрытие кода - Уязвимости безопасности ## Troubleshooting ### Сборка падает на frontend ```bash # Проверить зависимости cd frontend && npm audit # Обновить зависимости npm update # Очистить кеш npm ci --cache /tmp/empty-cache ``` ### Сборка падает на backend ```bash # Проверить requirements.txt cd backend && pip check # Обновить зависимости pip-compile requirements.in ``` ### Проблемы с Docker registry ```bash # Проверить авторизацию docker login registry.nevetime.ru # Проверить образ docker pull registry.nevetime.ru/mc-panel:latest ``` ### Деплой не работает ```bash # Проверить SSH подключение ssh -i ~/.ssh/deploy_key user@server # Проверить Docker на сервере docker ps docker-compose ps ``` ## Оптимизация ### Ускорение сборки - Использование кеша Docker слоев - Параллельные шаги где возможно - Оптимизация Dockerfile ### Уменьшение размера образа - Multi-stage build - Минимальные базовые образы - Очистка кеша пакетных менеджеров ### Безопасность - Регулярное сканирование уязвимостей - Обновление базовых образов - Ротация секретов