CI/CD — конвейер непрерывной интеграции и доставки¶
CI/CD (сокращение от англ. Continuous Integration / Continuous Delivery или Continuous Deployment) — набор практик и инструментов автоматизации сборки, тестирования и выпуска программного обеспечения. CI (непрерывная интеграция) означает, что разработчики часто — несколько раз в день — вносят изменения в общий код, и каждое изменение автоматически проверяется сборкой и тестами. CD (непрерывная доставка или развёртывание) означает, что проверенный код автоматически подготавливается к выпуску и, при наличии соответствующей настройки, разворачивается в рабочей среде без ручных операций.
¶История
Идея автоматической сборки и тестирования кода возникла в конце 1990-х годов. Термин «Continuous Integration» ввёл Гринтифф (Kent Beck) в контексте Extreme Programming, а практику популяризовали Мартин Фаулер и Джез Хамбл. В 2004 году Хамбл и Дэвид Фарли выпустили книгу «Continuous Delivery», сформулировавшую конвейер автоматизированной доставки ПО.
Первые системы непрерывной интеграции — CruiseControl (2001), затем Hudson (2004) и Jenkins (после форка Hudson в 2011 году) — работали на выделенных серверах, которые разработчики разворачивали и обслуживали самостоятельно. С появлением облачных платформ (Travis CI, 2011; GitLab CI, 2015; GitHub Actions, 2019) конвейеры стали описываться конфигурационными файлами в репозитории кода, а инфраструктура для их выполнения предоставляется как сервис.
¶Основные понятия
Конвейер (pipeline) — последовательность этапов, через которые проходит код от коммита до развёртывания. Типичный конвейер включает:
- Сборку проекта (компиляция, упаковка артефактов).
- Автоматическое тестирование — юнит-тесты, интеграционные тесты, проверки стиля кода.
- Статический анализ (linting) и проверку безопасности зависимостей.
- Развёртывание на тестовый (staging) или боевой (production) сервер.
Триггер — событие, запускающее конвейер: push в репозиторий, создание pull request, расписание или ручной запуск.
Артефакты — скомпилированные бинарные файлы, контейнеры Docker, пакеты, которые создаются на этапе сборки и далее переносятся по конвейеру без повторной сборки.
Матричные сборки — одновременная проверка кода в нескольких окружениях (разные версии языка, операционные системы).
¶Инструменты
| Инструмент | Тип | Особенности |
|---|---|---|
| Jenkins | Самостоятельный сервер | Открытый код, тысячи плагинов, требует администрирования |
| GitLab CI/CD | Встроен в GitLab | Конфигурация в .gitlab-ci.yml, интеграция с реестром контейнеров |
| GitHub Actions | Облачный сервис | Запуск на гибких виртуальных машинах, маркетплейс действий |
| TeamCity | Коммерческий продукт от JetBrains | Мощная кэширование сборок, интеграция с IDE JetBrains |
| CircleCI | Облачный сервис | Контейнерные и машинные исполнители |
| Bamboo | Коммерческий продукт Atlassian | Интеграция с Jira и Bitbucket |
| Argo CD | GitOps-инструмент | Декларативное развёртывание в Kubernetes |
В российской практике, на фоне санкционных ограничений и ухода ряда зарубежных вендоров с локального рынка, получили распространение решения на базе Jenkins, а также отечественные платформы: «Сбер-Пайплайн», платформы на базе Kubernetes и GitLab-совместимые системы, развернутые в собственных облаках (Yandex Cloud, Selectel, VK Cloud).
¶CI/CD в контейнерной инфраструктуре
С распространением Docker и Kubernetes конвейеры стали собирать не просто артефакты, а образы контейнеров. Типичный путь: сборка образа → публикация в реестр (registry) → развёртывание через Helm или Kustomize. Практика GitOps предполагает, что желаемое состояние кластера описывается в Git-репозитории, а специальный агент (Argo CD, Flux) синхронизирует реальное состояние с описанным.
¶Преимущества и риски
Автоматизация сокращает время от коммита до выпуска с недель до минут, рано выявляет дефекты и уменьшает объём ручной работы. Однако внедрение CI/CD требует покрытия тестами, стабильной инфраструктуры и дисциплины: плохие тесты приводят к ложным срабатываниям, а настроенный без ревью конвейер может выпустить дефектный код в боевую среду.
¶Применение
CI/CD стал стандартом для веб-разработки, мобильных приложений, инфраструктуры как кода (Terraform, Ansible) и машинного обучения (MLOps). В государственных и корпоративных заказах автоматизация выпуска ПО закрепляется регламентами и стандартами безопасности.
¶Исторические факты
- Jenkins — самый популярный CI-сервер с открытым кодом, по данным опросов Stack Overflow стабильно входит в тройку наиболее используемых инструментов DevOps.
- В 2018 году Oracle перевёл Hudson под своё управление, а сообщество продолжило развитие форка Jenkins.
- Ключевые конференции DevOps, на которых обсуждаются практики CI/CD — DevOpsDays и FOSDEM.
¶Источники
- Хамбл Дж., Фарли Д. Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation.
- Фаулер М. Continuous Integration.
- Jenkins Documentation.
- GitLab CI/CD Documentation.
- GitHub Actions Documentation.
