CI/CD (Continuous Integration / Continuous Delivery или Continuous Deployment) — это практика DevOps, которая автоматизирует процессы сборки, тестирования и развёртывания кода. CI/CD позволяет командам разработки чаще и надёжнее выпускать обновления, сокращая время между написанием кода и его доставкой пользователям.
Continuous Integration (CI)
Continuous Integration (непрерывная интеграция) — это практика, при которой разработчики часто (несколько раз в день) сливают свои изменения кода в общую ветку репозитория. Каждое изменение автоматически проходит сборку и тестирование, что позволяет быстро выявлять ошибки интеграции и конфликты.
Основные принципы CI:
- Частые коммиты в основную ветку (main/master).
- Автоматическая сборка при каждом изменении.
- Автоматическое прохождение тестов (unit, integration).
- Быстрая обратная связь для разработчиков.
- Раннее обнаружение конфликтов и ошибок.
Continuous Delivery (CD)
Continuous Delivery (непрерывная доставка) — это расширение CI, которое автоматизирует процесс развёртывания кода в тестовые и промежуточные окружения. Код, прошедший все тесты, готов к развёртыванию в продакшен, но финальное развёртывание требует ручного подтверждения.
Continuous Deployment (CD)
Continuous Deployment (непрерывное развёртывание) — это следующий уровень автоматизации, при котором каждое изменение, прошедшее все этапы pipeline, автоматически развёртывается в продакшен без ручного вмешательства. Это требует высокой степени автоматизации тестирования и мониторинга.
CI/CD Pipeline (конвейер)
CI/CD pipeline — это автоматизированный рабочий процесс, который состоит из последовательных этапов, через которые проходит код от изменения до развёртывания.
Основные этапы pipeline:
- Source / Trigger — код отправляется в репозиторий (Git), pipeline запускается автоматически.
- Build / Compile — код компилируется, собираются зависимости, создаётся артефакт (бинарник, образ контейнера).
- Test / Validate — выполняются автоматические тесты (unit, integration, acceptance, performance).
- Security Scan — проверка на уязвимости, секреты, лицензии.
- Deploy to Staging — развёртывание в тестовое окружение.
- Deploy to Production — развёртывание в продакшен (автоматически или вручную).
- Monitor / Rollback — мониторинг метрик, автоматический откат при ошибках.
Преимущества CI/CD
- Быстрая доставка — обновления выпускаются чаще и быстрее.
- Надёжность — автоматическое тестирование снижает количество ошибок.
- Обратная связь — разработчики быстро узнают о проблемах.
- Автоматизация — меньше ручных операций, меньше человеческих ошибок.
- Масштабируемость — легко добавлять новые тесты и окружения.
- Безопасность — проверки на уязвимости встроены в pipeline.
Недостатки
- Сложность настройки — требуется время и экспертиза для внедрения.
- Затраты на инфраструктуру — нужны серверы для сборки, тестирования и развёртывания.
- Поддержка — pipeline требует постоянного обслуживания и обновления.
- Зависимость от тестов — плохие тесты дают ложное чувство безопасности.
Примеры инструментов
- CI-системы: Jenkins, GitLab CI, GitHub Actions, CircleCI, Travis CI, Azure Pipelines.
- CD-системы: Spinnaker, ArgoCD, Flux, Jenkins X.
- Контейнеризация: Docker, Kubernetes.
- Мониторинг: Prometheus, Grafana, ELK Stack.
Пример pipeline (GitLab CI):
stages:
- build
- test
- deploy
build:
stage: build
script:
- npm install
- npm run build
test:
stage: test
script:
- npm run test
deploy:
stage: deploy
script:
- ./deploy.sh
only:
- main
Правила
- Автоматизируйте всё, что можно.
- Используйте систему контроля версий (Git).
- Пишите быстрые и надёжные тесты.
- Держите pipeline простым и понятным.
- Тестируйте на каждом этапе.
- Используйте контейнеризацию для согласованности окружений.
- Внедряйте безопасность (DevSecOps).
- Мониторьте и логируйте развёртывания.
- Реализуйте стратегию отката (rollback).
