Ответ
Типичный жизненный цикл задачи в современном CI/CD-пайплайне:
-
Планирование и анализ:
- Задача создаётся в трекере (Jira, YouTrack).
- Проводится анализ требований, оценка сложности, проектирование (при необходимости).
-
Разработка:
- Создаётся ветка в Git (например,
feature/TASK-123). - Пишется код с соблюдением code style и best practices.
- Написанный код покрывается модульными (JUnit, TestNG) и, при необходимости, интеграционными тестами.
- Создаётся ветка в Git (например,
-
Ревью кода (Code Review):
- Разработчик создаёт Merge/Pull Request (MR/PR) в GitLab/GitHub/Bitbucket.
- Коллеги проверяют код на корректность, читаемость, безопасность и производительность.
- Вносятся правки по замечаниям.
-
Сборка и непрерывная интеграция (CI):
- При пуше в ветку или создании MR автоматически запускается пайплайн CI (Jenkins, GitLab CI, GitHub Actions).
- Этапы CI:
- Сборка проекта (Maven:
mvn clean compile, Gradle:gradle build). - Запуск всех тестов.
- Статический анализ кода (SonarQube).
- Создание артефакта (Docker-образ, JAR/WAR-файл).
- Сборка проекта (Maven:
-
Тестирование на стендах:
- Артефакт автоматически разворачивается на тестовом/стейджинг-окружении (с помощью Ansible, Kubernetes, Docker Compose).
- Выполняются ручные и автоматические интеграционные, регрессионные и нагрузочные тесты.
-
Деплой на продакшн (CD):
- После успешного тестирования и аппрува MR код мержится в основную ветку (
main,master). - Запускается пайплайн непрерывной доставки/развёртывания (CD).
- Стратегии деплоя: синий-зелёный (blue-green), канареечный (canary), rolling update — для минимизации downtime.
- Развёртывание выполняется инструментами оркестрации (Kubernetes
kubectl apply, Terraform) или конфигурационными менеджерами (Ansible).
- После успешного тестирования и аппрува MR код мержится в основную ветку (
-
Пост-релизный мониторинг:
- Мониторинг логов (ELK Stack, Loki), метрик (Prometheus/Grafana) и трассировки (Jaeger, Zipkin).
- Настройка алертов для быстрого реагирования на инциденты.
Пример минимального .gitlab-ci.yml:
stages:
- build
- test
- deploy-stage
- deploy-prod
build-job:
stage: build
script:
- mvn clean package
artifacts:
paths:
- target/*.jar
test-job:
stage: test
script:
- mvn test
deploy-to-stage:
stage: deploy-stage
script:
- kubectl apply -f k8s/deployment-stage.yaml
only:
- main
deploy-to-prod:
stage: deploy-prod
script:
- kubectl apply -f k8s/deployment-prod.yaml
when: manual # Требует ручного подтверждения
only:
- main