Какие инструменты и практики используются для настройки CI/CD пайплайна?

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

Ответ

CI/CD (Continuous Integration/Continuous Delivery) пайплайн автоматизирует сборку, тестирование и развертывание приложений.

Популярные инструменты и их применение:

  1. Jenkins

    • Описание: Самостоятельный, расширяемый сервер с открытым исходным кодом. Высокая гибкость за счет плагинов.
    • Пример декларативного Jenkinsfile (Pipeline as Code):
      pipeline {
          agent any
          tools { maven 'Maven-3.8' } // Инструмент глобально
          stages {
              stage('Build') {
                  steps {
                      sh 'mvn clean compile'
                  }
              }
              stage('Test & Analyze') {
                  steps {
                      sh 'mvn test' // Unit-тесты
                      sh 'mvn sonar:sonar' // Анализ кода (SonarQube)
                  }
              }
              stage('Package') {
                  steps {
                      sh 'mvn package -DskipTests' // Создание JAR/WAR
                  }
              }
              stage('Deploy to Staging') {
                  steps {
                      sh 'scp target/app.jar user@staging-server:/opt/app'
                      sh 'ssh user@staging-server "systemctl restart app"'
                  }
              }
          }
      }
  2. GitHub Actions / GitLab CI/CD

    • Описание: CI/CD-решения, встроенные в платформы Git. Конфигурация хранится в репозитории в виде YAML-файлов.
    • Пример .github/workflows/ci.yml для GitHub Actions:
      name: Java CI
      on: [push]
      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'
                distribution: 'temurin'
            - name: Build with Maven
              run: mvn -B clean verify # verify включает интеграционные тесты
            - name: Upload Artifact
              uses: actions/upload-artifact@v3
              with:
                name: application-jar
                path: target/*.jar

Сопутствующие практики и инструменты:

  • Контейнеризация (Docker): Создание переносимых образов приложения.
  • Оркестрация (Kubernetes): Автоматическое развертывание и масштабирование в production.
  • Инфраструктура как код (IaC): Terraform или Ansible для воспроизводимого создания среды.
  • Артефакт-репозитории: Nexus или Artifactory для хранения собранных билдов (Docker-образов, JAR-файлов).