Some checks failed
continuous-integration/drone/push Build encountered an error
211 lines
6.1 KiB
Markdown
211 lines
6.1 KiB
Markdown
# 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
|
||
- Минимальные базовые образы
|
||
- Очистка кеша пакетных менеджеров
|
||
|
||
### Безопасность
|
||
- Регулярное сканирование уязвимостей
|
||
- Обновление базовых образов
|
||
- Ротация секретов |