Ответ
Continuous Integration (CI, Непрерывная интеграция) — это практика разработки, при которой изменения кода от всех разработчиков в команде часто (несколько раз в день) интегрируются в общую основную ветку (например, main). Каждая интеграция автоматически проверяется сборкой и набором тестов для максимально быстрого выявления ошибок.
Ключевые цели и преимущества CI:
- Раннее обнаружение ошибок: Проблемы выявляются сразу после коммита, а не через недели.
- Снижение рисков конфликтов слияния: Частые интеграции делают каждое изменение небольшим и управляемым.
- Автоматизация рутины: Сборка, тестирование, анализ кода происходят без участия человека.
- Повышение уверенности в коде: Основная ветка всегда находится в рабочем состоянии.
Типичный пайплайн CI в DevOps:
- Trigger: Разработчик пушит код в репозиторий Git (например, в GitLab).
- Сборка (Build): CI-сервер (например, GitLab Runner) забирает код, устанавливает зависимости (npm install, mvn dependency:resolve).
- Статический анализ: Запускаются линтеры (ESLint, SonarQube) и проверки безопасности (SAST).
- Тестирование: Выполняются модульные (unit), интеграционные (integration) и, возможно, e2e-тесты.
- Артефакт: В случае успеха создается артефакт — собранное приложение (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.