Опиши типичный CI/CD пайплайн для деплоя Java-приложения.

«Опиши типичный CI/CD пайплайн для деплоя Java-приложения.» — вопрос из категории DevOps, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Типичный CI/CD пайплайн для Java-приложения включает автоматизацию сборки, тестирования и развертывания.

Этапы пайплайна (на примере GitLab CI):

  1. Сборка (Build):

    build:
      stage: build
      script:
        - mvn clean compile
      artifacts:
        paths:
          - target/
  2. Тестирование (Test):

    test:
      stage: test
      script:
        - mvn test
      dependencies:
        - build
  3. Статический анализ кода (Code Quality):

    sonarqube-check:
      stage: test
      script:
        - mvn sonar:sonar
  4. Создание артефакта (Package):

    package:
      stage: package
      script:
        - mvn package -DskipTests
      artifacts:
        paths:
          - target/*.jar
  5. Создание Docker-образа:

    docker-build:
      stage: package
      script:
        - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
        - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
  6. Деплой в 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
  7. Деплой в 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 для отслеживания здоровья после деплоя.