Что такое Continuous Integration (CI)?

«Что такое Continuous Integration (CI)?» — вопрос из категории CI/CD, который задают на 28% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Continuous Integration (CI, Непрерывная интеграция) — это практика разработки, при которой изменения кода от всех разработчиков в команде часто (несколько раз в день) интегрируются в общую основную ветку (например, main). Каждая интеграция автоматически проверяется сборкой и набором тестов для максимально быстрого выявления ошибок.

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

  • Раннее обнаружение ошибок: Проблемы выявляются сразу после коммита, а не через недели.
  • Снижение рисков конфликтов слияния: Частые интеграции делают каждое изменение небольшим и управляемым.
  • Автоматизация рутины: Сборка, тестирование, анализ кода происходят без участия человека.
  • Повышение уверенности в коде: Основная ветка всегда находится в рабочем состоянии.

Типичный пайплайн CI в DevOps:

  1. Trigger: Разработчик пушит код в репозиторий Git (например, в GitLab).
  2. Сборка (Build): CI-сервер (например, GitLab Runner) забирает код, устанавливает зависимости (npm install, mvn dependency:resolve).
  3. Статический анализ: Запускаются линтеры (ESLint, SonarQube) и проверки безопасности (SAST).
  4. Тестирование: Выполняются модульные (unit), интеграционные (integration) и, возможно, e2e-тесты.
  5. Артефакт: В случае успеха создается артефакт — собранное приложение (JAR, Docker-образ) и отчеты.

Пример .gitlab-ci.yml для Node.js проекта:

stages:
  - test
  - build
  - security-scan

unit_tests:
  stage: test
  image: node:18-alpine
  script:
    - npm ci
    - npm run test:unit

build_docker:
  stage: build
  image: docker:latest
  services:
    - docker:dind
  script:
    - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA .
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA

trivy_scan:
  stage: security-scan
  image: aquasec/trivy:latest
  script:
    - trivy image --exit-code 1 --severity HIGH,CRITICAL $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA

Популярные инструменты: Jenkins, GitLab CI/CD, GitHub Actions, CircleCI, Azure Pipelines.