CI/CD Pipeline¶
GitHub Actions для AqStream.
Обзор¶
flowchart LR
PR["Pull Request"] --> Lint["Stage 1: Lint"]
Lint --> Test["Stage 2: Tests"]
Test --> Build["Stage 3: Build"]
Build --> Main["Merge to main"]
Main --> Allure["Stage 4: Allure Report"]
Main --> Docker["Stage 5: Docker Build"]
Docker --> Deploy["Stage 6: Deploy"]
Deploy --> Health["Stage 7: Health Check"]
Workflow¶
| Файл | Триггер | Описание |
|---|---|---|
cicd.yml |
PR, Push to main | Единый pipeline: Lint → Test → Build → Allure → Docker → Deploy → Health |
Поддерживает ручной запуск через workflow_dispatch с опцией skip_deploy.
CI Workflow¶
Backend Jobs¶
backend-lint:
# Checkstyle проверки
./gradlew checkstyleMain checkstyleTest
backend-test:
# Unit и интеграционные тесты
# Services: PostgreSQL 16, Redis 7
./gradlew test
backend-build:
# Сборка JAR файлов
# Запускается после успешных lint и test
./gradlew build -x test
Frontend Jobs¶
frontend-lint:
# ESLint и TypeScript проверки
pnpm lint
pnpm typecheck
frontend-test:
# Unit тесты (Vitest)
pnpm test
frontend-build:
# Production сборка
# Запускается после успешных lint и test
pnpm build
Concurrency¶
Отменяет предыдущие запуски при новых коммитах в том же PR.
Quality Gates¶
| Check | Required | Description |
|---|---|---|
| Backend Lint (Checkstyle) | Yes | Code style |
| Backend Tests | Yes | JUnit 5 |
| Frontend Lint (ESLint) | Yes | Code style |
| Frontend TypeCheck | Yes | TypeScript |
| Frontend Tests | Yes | Vitest |
Deploy to Production¶
Автоматический деплой при push в main:
Docker Build Job¶
- Build JARs —
./gradlew bootJar - Build Docker images — все сервисы (java-base, gateway, user-service, event-service, payment-service, notification-service, media-service, analytics-service, frontend)
- Push to GHCR —
ghcr.io/<repo>/<service>:<sha>
Deploy Job¶
- SSH — подключение к production серверу
- Sequential start — поочерёдный запуск с ожиданием:
- Databases (PostgreSQL, Redis, RabbitMQ, MinIO)
- user-service (core, 90s wait)
- event-service (45s wait)
- notification-service, gateway, frontend
- Cleanup — удаление старых Docker images
Health Check Job¶
- Wait — 120s для полного запуска
- Check Gateway —
https://api.aqstream.ru/actuator/health - Retry — до 30 попыток с интервалом 10s
- Diagnostics — при ошибке выводит логи контейнеров
Image Tags¶
ghcr.io/egorov-ma/aqstream/java-base:latest
ghcr.io/egorov-ma/aqstream/gateway:<sha>
ghcr.io/egorov-ma/aqstream/user-service:<sha>
ghcr.io/egorov-ma/aqstream/event-service:<sha>
ghcr.io/egorov-ma/aqstream/notification-service:<sha>
ghcr.io/egorov-ma/aqstream/frontend:<sha>
Deploy Documentation¶
Автоматический деплой документации при изменениях в docs/:
- Trigger — push to main с изменениями в
docs/** - Validate — Markdownlint, OpenAPI Spectral (не блокирует деплой)
- Build — MkDocs + Material theme
- Deploy — rsync на production сервер в
/var/www/docs.aqstream.ru
on:
push:
branches: [main]
paths: ['docs/**']
jobs:
validate:
# Markdownlint + Spectral (continue-on-error: true)
build:
steps:
- uses: actions/setup-python@v5
- run: pip install -r docs/_internal/doc-as-code/requirements.txt
- run: mkdocs build
deploy:
steps:
- run: rsync -avz --delete site/ $SSH_USER@$SSH_HOST:/var/www/docs.aqstream.ru/
См. полный пример в Server Setup.
Allure Reports¶
Автоматическая генерация и публикация Allure отчётов о тестировании:
- Trigger — каждый push в
mainпосле успешных тестов - Collect — Backend Tests собирает результаты в артефакт
allure-results - Generate — Allure Report job генерирует HTML из результатов
- Deploy — публикация на GitHub Pages через
actions/deploy-pages
URL: https://egorov-ma.github.io/aqstream/allure/
Подробнее: GitHub Pages Setup
GitHub Secrets¶
| Secret | Description | Required For |
|---|---|---|
GITHUB_TOKEN |
Автоматически предоставляется | GHCR push |
SSH_HOST |
IP-адрес или домен сервера | deploy-production, docs |
SSH_USER |
Пользователь SSH | deploy-production, docs |
SSH_KEY |
Приватный SSH ключ | deploy-production, docs |
Branch Protection Rules¶
Для ветки main:
- [x] Require pull request reviews (1 approval)
- [x] Require status checks to pass
backend-lintbackend-testbackend-buildfrontend-lintfrontend-testfrontend-build- [x] Require branches to be up to date
- [x] Include administrators
Caching¶
Gradle¶
- uses: gradle/actions/setup-gradle@v4
# Автоматически кэширует:
# - ~/.gradle/caches
# - ~/.gradle/wrapper
pnpm¶
Troubleshooting¶
CI падает на checkstyle¶
# Локально проверить
./gradlew checkstyleMain checkstyleTest
# Посмотреть отчёт
open build/reports/checkstyle/main.html
Тесты падают в CI но проходят локально¶
- Проверить environment variables в workflow
- Убедиться что PostgreSQL/Redis доступны (services)
- Проверить таймауты health checks
Docker build падает¶
- Убедиться что Dockerfile существует в сервисе
- Проверить что JAR собрался (
./gradlew bootJar) - Проверить права на GHCR
Дальнейшее чтение¶
- GitHub Secrets — настройка секретов
- Deploy — процесс деплоя
- Environments — окружения
- Runbook — операционные процедуры