Ответ
Типичный CI/CD пайплайн для Java-приложения включает автоматизацию сборки, тестирования и развертывания.
Этапы пайплайна (на примере GitLab CI):
-
Сборка (Build):
build: stage: build script: - mvn clean compile artifacts: paths: - target/ -
Тестирование (Test):
test: stage: test script: - mvn test dependencies: - build -
Статический анализ кода (Code Quality):
sonarqube-check: stage: test script: - mvn sonar:sonar -
Создание артефакта (Package):
package: stage: package script: - mvn package -DskipTests artifacts: paths: - target/*.jar -
Создание Docker-образа:
docker-build: stage: package script: - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA . - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA -
Деплой в staging-окружение:
deploy-to-staging: stage: deploy script: - echo "Deploying to Kubernetes..." - kubectl set image deployment/myapp myapp=$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA -n staging environment: name: staging only: - main # Автоматический деплой при мерже в main -
Деплой в production (ручной или с approval):
deploy-to-prod: stage: deploy script: - kubectl apply -f k8s/production.yaml environment: name: production when: manual # Требует ручного запуска
Ключевые практики:
- Инфраструктура как код (IaC): Конфигурации Kubernetes (Deployment, Service) хранятся в репозитории.
- Неизменяемые артефакты: Версия образа определяется хэшем коммита (
$CI_COMMIT_SHA). - Откат (Rollback): Простой откат через развертывание предыдущего Docker-тега.
- Мониторинг: Интеграция с Prometheus/Grafana для отслеживания здоровья после деплоя.