Каков типичный путь кода от отправки в репозиторий до продакшн-развертывания?

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

Ответ

Этот процесс описывает CI/CD-пайплайн, который автоматизирует доставку изменений.

Типичные этапы:

  1. Push кода — разработчик отправляет изменения в ветку (например, main) удаленного репозитория (GitHub, GitLab).
  2. Запуск CI (Continuous Integration) — система (Jenkins, GitHub Actions, GitLab CI) автоматически запускает пайплайн.
    • Сборка — mvn clean package или gradle build.
    • Статический анализ — линтеры (Checkstyle, PMD), анализ уязвимостей (OWASP Dependency-Check).
    • Тестирование — модульные, интеграционные тесты.
    • Создание артефакта — сборка JAR/WAR/Docker-образа.
  3. Публикация артефакта — артефакт загружается в репозиторий (Nexus, Artifactory, Container Registry).
  4. Деплой на staging — автоматическое или ручное развертывание на тестовое окружение (Kubernetes, виртуальная машина).
  5. Тестирование на staging — запуск приемочных, нагрузочных тестов, ручное тестирование QA.
  6. Деплой в production — после утверждения применяется стратегия развертывания (Blue-Green, Canary, Rolling Update) для минимизации рисков.

Пример стадии CI в GitHub Actions:

jobs:
  build-and-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Set up JDK 17
        uses: actions/setup-java@v3
        with:
          java-version: '17'
      - name: Build with Maven
        run: mvn -B clean verify
      - name: Upload artifact
        uses: actions/upload-artifact@v3
        with:
          name: my-app
          path: target/*.jar