This commit is contained in:
211
CI_CD_README.md
Normal file
211
CI_CD_README.md
Normal file
@@ -0,0 +1,211 @@
|
||||
# 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
|
||||
- Минимальные базовые образы
|
||||
- Очистка кеша пакетных менеджеров
|
||||
|
||||
### Безопасность
|
||||
- Регулярное сканирование уязвимостей
|
||||
- Обновление базовых образов
|
||||
- Ротация секретов
|
||||
Reference in New Issue
Block a user