Что такое CI/CD pipeline и как он настраивается в GitLab CI?

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

Ответ

CI/CD pipeline (конвейер непрерывной интеграции и доставки) — это автоматизированный процесс, который включает этапы сборки, тестирования и развертывания кода при каждом его изменении. Он реализуется с помощью инструментов вроде GitLab CI, Jenkins или GitHub Actions.

Основные этапы (stages):

  1. Build — компиляция кода, сборка артефактов.
  2. Test — запуск модульных, интеграционных и других тестов.
  3. Deploy — развертывание приложения в тестовую, staging или production-среду.

Пример базового .gitlab-ci.yml для Java-проекта:

# Определяем последовательность этапов
stages:
  - build
  - test
  - deploy

# Кэшируем зависимости Maven для ускорения сборок
cache:
  paths:
    - .m2/repository

# Задание для сборки
build_job:
  stage: build
  image: maven:3.8-openjdk-17 # Используем конкретный Docker-образ
  script:
    - mvn clean compile
  artifacts:
    paths:
      - target/ # Сохраняем результаты сборки для следующих этапов

# Задание для тестирования
test_job:
  stage: test
  image: maven:3.8-openjdk-17
  script:
    - mvn test
  dependencies:
    - build_job # Зависит от артефактов этапа build

# Задание для деплоя (пример для staging)
deploy_staging_job:
  stage: deploy
  image: alpine:latest
  script:
    - echo "Deploying to staging environment..."
    - apk add --no-cache curl
    - curl -X POST "$DEPLOY_HOOK_URL" # Вызов webhook для деплоя
  only:
    - main # Запускается только для коммитов в main ветку
  environment:
    name: staging
    url: https://staging.example.com

Ключевые преимущества:

  • Автоматизация — исключает ручные ошибки.
  • Раннее обнаружение проблем — тесты запускаются сразу после коммита.
  • Скорость и предсказуемость — процесс стандартизирован.
  • Воспроизводимость — используется изолированное окружение (Docker).