CI_CD_README.md•9.56 kB
# CI/CD Pipeline для Radius MCP Server
Этот документ описывает настройку и использование CI/CD пайплайна для автоматической сборки, тестирования и развертывания Radius MCP Server.
## 🚀 Быстрый старт
### Локальная разработка
```bash
# Установка зависимостей
npm install
# Запуск тестов
npm run test
# Запуск всех проверок
npm run test:all
# Проверка качества кода
npm run quality:check
```
### Деплой
```bash
# Деплой в dev
./deploy.sh -e dev
# Деплой в testing
./deploy.sh -e testing
# Деплой в production
./deploy.sh -e prod20
```
## 📋 Доступные скрипты
### Тестирование
- `npm run test` - Запуск всех тестов
- `npm run test:unit` - Unit тесты
- `npm run test:smoke` - Smoke тесты
- `npm run test:coverage` - Покрытие кода
- `npm run test:integration` - Интеграционные тесты
### Качество кода
- `npm run lint` - ESLint проверки
- `npm run lint:fix` - Автоисправление ESLint
- `npm run format` - Prettier форматирование
- `npm run format:check` - Проверка форматирования
- `npm run quality:check` - Комплексная проверка качества
### Сборка и деплой
- `npm run build` - Сборка проекта
- `npm run start` - Запуск в production
- `npm run dev` - Запуск в development
- `npm run ci:test` - Полный CI тест
- `npm run release` - Создание релиза
## 🏗️ Архитектура CI/CD
### Этапы пайплайна
1. **Prebuild** - Сборка Docker образа
2. **UnitTestBack** - Unit тесты и линтинг
3. **CheckApproves** - Проверка апрувов MR
4. **Converge** - Деплой в Kubernetes
5. **E2ETest** - End-to-end тесты
6. **Integration Test** - Интеграционные тесты
7. **Cleanup** - Очистка старых образов
### Окружения
| Окружение | Ветка | URL | Реплики | Ресурсы |
|-----------|-------|-----|---------|---------|
| **dev** | `develop` | https://radius-mcp-server-dev.myradius.ru | 1 | 500m CPU, 512Mi RAM |
| **testing** | `testing` | https://radius-mcp-server-testing.myradius.ru | 2 | 1000m CPU, 1Gi RAM |
| **production** | `prod20` | https://radius-mcp-server.myradius.ru | 3 | 2000m CPU, 2Gi RAM |
## 🔧 Настройка
### Переменные GitLab CI/CD
Настройте в Settings → CI/CD → Variables:
```bash
# Werf и Registry
WERF_REPO=registry-yc.myradius.ru/radius-mcp-server
BUILDS_REGISTRY_URL=registry-yc.myradius.ru
WERF_IMAGES_CLEANUP_PASSWORD=your-cleanup-password
# MR Approvals
GITLAB_TOKEN_FOR_CI=your-gitlab-token
APPROVAL_AUTHORS=user1,user2,user3
# Application Secrets
EMPLOYEE_API_KEY=your-employee-api-key
EMPLOYEE_API_BASE_URL=https://api.myradius.ru
CALENDAR_API_KEY=your-calendar-api-key
CALENDAR_API_HOST_URL=https://calendar.myradius.ru
```
### Локальная настройка
1. **Установите зависимости:**
```bash
npm install
```
2. **Настройте переменные окружения:**
```bash
cp .env.example .env
# Отредактируйте .env файл
```
3. **Проверьте настройки:**
```bash
npm run quality:check
```
## 🧪 Тестирование
### Unit тесты
```bash
# Запуск всех unit тестов
npm run test:unit
# Запуск с покрытием
npm run test:coverage
# Запуск в watch режиме
npm run test:watch
```
### Smoke тесты
```bash
# Быстрые smoke тесты
npm run test:smoke
```
### Интеграционные тесты
```bash
# Тестирование dev окружения
./ci-integration-test.sh -e dev
# Тестирование с кастомным URL
./ci-integration-test.sh -e testing -u https://custom-url.com
```
### Качество кода
```bash
# Комплексная проверка
npm run quality:check
# Только линтинг
npm run lint
# Только форматирование
npm run format:check
```
## 🚀 Деплой
### Автоматический деплой
Деплой происходит автоматически при пуше в соответствующие ветки:
- **develop** → dev окружение
- **testing** → testing окружение
- **prod20** → production окружение
### Ручной деплой
```bash
# Деплой в dev
./deploy.sh -e dev
# Деплой в testing с dry-run
./deploy.sh -e testing -d
# Принудительный деплой в production
./deploy.sh -e prod20 -f
```
### Мониторинг деплоя
```bash
# Мониторинг dev деплоя
./monitor-deployment.sh -e dev
# Мониторинг с кастомным таймаутом
./monitor-deployment.sh -e testing -t 600
```
## 📊 Мониторинг
### Health Checks
- **Liveness probe:** `GET /mcp` каждые 10 сек
- **Readiness probe:** `GET /mcp` каждые 5 сек
### Логи
```bash
# Логи приложения
kubectl logs -f deployment/radius-mcp-server -n $NAMESPACE
# Логи werf
werf logs --env $ENV
```
### Метрики
```bash
# Статус подов
kubectl get pods -n $NAMESPACE
# Статус сервисов
kubectl get services -n $NAMESPACE
# Статус ingress
kubectl get ingress -n $NAMESPACE
```
## 🔄 Workflow
### 1. Разработка
```bash
# Создание фича ветки
git checkout -b task-1234/feat/employee-management
# Разработка
npm run dev
# Тестирование
npm run test:all
```
### 2. Code Review
```bash
# Создание MR в GitLab
# Автоматически запускается:
# - Prebuild
# - UnitTestBack
# - Check MR Approves
```
### 3. Деплой в dev
```bash
# Мерж в develop
git checkout develop
git merge task-1234/feat/employee-management
git push origin develop
# Автоматический деплой в dev
```
### 4. Деплой в testing
```bash
# Мерж в testing
git checkout testing
git merge develop
git push origin testing
# Автоматический деплой в testing
```
### 5. Деплой в production
```bash
# Мерж в prod20
git checkout prod20
git merge testing
git push origin prod20
# Автоматический деплой в production
```
## 🏷️ Релизы
### Создание релиза
```bash
# Создание релиза v1.0.0
npm run release -v 1.0.0
# Dry run
npm run release -v 1.0.0 -d
# Без пуша в remote
npm run release -v 1.0.0 --no-push
```
### Версионирование
Используется [Semantic Versioning](https://semver.org/):
- **MAJOR** - Breaking changes
- **MINOR** - New features (backward compatible)
- **PATCH** - Bug fixes (backward compatible)
## 🛠️ Устранение неполадок
### Ошибка формата ветки
```bash
Error: Неверный формат ветки
```
**Решение:** Используйте допустимые форматы:
- `task-XXXX/feat/описание`
- `task-XXXX/fix/описание`
- `develop`, `testing`, `prod20`
### Ошибка тестов
```bash
npm run test failed
```
**Решение:**
```bash
# Проверить зависимости
npm ci
# Запустить тесты с подробным выводом
npm run test -- --verbose
# Проверить покрытие
npm run test:coverage
```
### Ошибка деплоя
```bash
werf converge failed
```
**Решение:**
```bash
# Проверить состояние кластера
kubectl get pods -n $NAMESPACE
# Проверить логи werf
werf logs --env $ENV
# Проверить values файлы
cat .helm/values.$ENV.yaml
```
### Ошибка интеграционных тестов
```bash
Integration tests failed
```
**Решение:**
```bash
# Проверить доступность сервиса
curl -I https://your-service-url/mcp
# Проверить с port-forward
kubectl port-forward -n $NAMESPACE service/radius-mcp-server 8080:3000
curl -I http://localhost:8080/mcp
```
## 📚 Дополнительные ресурсы
- [GitLab CI/CD Documentation](https://docs.gitlab.com/ee/ci/)
- [Werf Documentation](https://werf.io/)
- [Kubernetes Documentation](https://kubernetes.io/docs/)
- [Jest Testing Framework](https://jestjs.io/)
- [ESLint Documentation](https://eslint.org/)
## 🤝 Поддержка
При возникновении проблем:
1. Проверьте логи CI/CD пайплайна
2. Запустите тесты локально
3. Проверьте конфигурацию окружения
4. Обратитесь к команде разработки
---
**Последнее обновление:** $(date +%Y-%m-%d)