Как работает CI/CD
Два независимых пайплайна
У проекта два репозитория (backend, frontend), у каждого свой пайплайн.
Push в backend собирает и деплоит только backend, push в frontend — только
frontend. Деплоятся в один namespace, релизы project-NN-backend и
project-NN-frontend.
git push main (в backend ИЛИ frontend)
│
▼
┌─────────────┐
│ Тесты │ pytest (backend) / npm test (frontend)
│ SonarQube │ анализ кода (quality gate)
└──────┬──────┘
│ ✅ тесты прошли
▼
┌─────────────┐
│ werf │ сборка образа компонента (backend ИЛИ frontend)
│ build │ контент-хеш тег (не :latest)
└──────┬──────┘
│
▼
┌─────────────┐
│ Trivy │ сканирование уязвимостей
│ scan │ CRITICAL/HIGH → стоп
└──────┬──────┘
│ ✅ уязвимостей нет
▼
┌─────────────┐ только в backend-пайплайне, если включён блок migrate:
│ migrate │ python manage.py migrate (werf weight -5, до раскатки)
└──────┬──────┘
▼
┌─────────────┐
│ werf │ деплой компонента, rolling update без даунтайма
│ converge │ релиз project-NN-<component>
└──────┬──────┘
▼
🚀 https://project-NN.simple-env.site ( / → frontend, /api → backend )
Ветки
| Событие | Что происходит |
|---|---|
push в main | Полный пайплайн — тесты, сборка, деплой компонента |
Pull Request в main | Только тесты + SonarQube (без деплоя) |
| push в другие ветки | Пайплайн не запускается |
Где смотреть результаты
Gitea → твой репозиторий → вкладка Actions → последний запуск.
Каждый шаг раскрывается и показывает логи. Если шаг упал — красный крестик.
Частые причины падения пайплайна
| Симптом | Причина | Решение |
|---|---|---|
| Tests failed | Тесты упали | Исправь тесты |
| Quality Gate failed | SonarQube нашёл проблемы | Исправь код, посмотри SonarQube |
| Trivy: CRITICAL CVE | Уязвимость в зависимости | Обнови версию пакета |
| migrate Job failed | Ошибка в миграции | Проверь migrate.py, откати если нужно |
| ImagePullBackOff | Nexus недоступен | Обратись к преподавателю |
| OOMKilled | Не хватает памяти | Оптимизируй или попроси увеличить лимит |