CI/CD — конвейер интеграции и развёртывания ПО¶
CI/CD (сокращение от англ. Continuous Integration / Continuous Delivery или Continuous Deployment, «непрерывная интеграция» / «непрерывная доставка») — набор практик, инструментов и методологий в разработке программного обеспечения, направленных на автоматизацию сборки, тестирования и выпуска кода. CI/CD является центральным элементом подхода DevOps и призван сократить цикл выпуска изменений, повысить их качество и сделать процесс поставки предсказуемым.
¶Основные понятия
¶Непрерывная интеграция (CI)
Непрерывная интеграция — практика, при которой разработчики как можно чаще объединяют собственные изменения в общий репозиторий кода, после чего автоматически запускаются сборка и набор проверок. Ключевые цели CI:
- раннее обнаружение ошибок при слиянии изменений от нескольких разработчиков;
- поддержание постоянной готовности основной ветки кода к выпуску;
- автоматизация рутинных операций — компиляции, запуска модульных тестов, проверки стиля кода, анализа статическим анализатором.
Типичный конвейер CI включает стадии: получение нового коммита, установка зависимостей, сборка проекта, запуск тестов, генерация отчётов о покрытии кода и публикация артефактов сборки.
¶Непрерывная доставка и непрерывное развёртывание (CD)
Термин CD раскрывается двумя способами:
- Continuous Delivery (непрерывная доставка) — изменения, прошедшие все проверки, автоматически доставляются в промежуточную или тестовую среду и могут быть выпущены в производство вручную, по решению команды.
- Continuous Deployment (непрерывное развёртывание) — изменения, прошедшие проверки, автоматически попадают в производственную среду без ручного подтверждения. Требует высокого уровня автоматизации тестирования, включая интеграционные и сценарные проверки.
¶История
Идея автоматической интеграции кода возникла в конце 1980-х — начале 1990-х годов. В 1991 году компания Tektronix внедрила автоматизированную систему сборки, выполнявшую интеграцию ежедневно. В 1994 году Гради Буч описал процесс «интеграции по часам» в своём руководстве по объектно-ориентированному проектированию.
Термин «Continuous Integration» в современном понимании популяризировал Кент Бек в рамках методологии Extreme Programming (XP) в конце 1990-х годов. В 2000-х идеи CI получили развитие с появлением систем непрерывной интеграции — сначала CruiseControl (2001), затем Hudson и Jenkins (2004—2011), TeamCity, Bamboo, GitLab CI и других.
Понятие Continuous Delivery закрепилось после выхода книги Джеза Хамбла и Дэвида Фарли «Continuous Delivery» в 2010 году, где была систематизирована практика автоматизированного выпуска ПО.
¶Инструменты
Наиболее известные системы автоматизации CI/CD:
| Инструмент | Тип | Особенности |
|---|---|---|
| Jenkins | Самохостинг, открытый код | Наиболее распространённая CI-система, тысячи плагинов |
| GitLab CI/CD | Встроен в GitLab | Конфигурация описывается файлом .gitlab-ci.yml |
| GitHub Actions | Облачный сервис | Интеграция с GitHub, marketplace с готовыми действиями |
| TeamCity | Самохостинг / облако | Продукт JetBrains |
| CircleCI | Облачный сервис | Конфигурация YAML |
| Bamboo | Самохостинг | Продукт Atlassian |
| Argo CD | GitOps | Декларативное развёртывание в Kubernetes |
В российской практике в качестве альтернатив западным облачным сервисам применяются, в частности, внутренние решения на базе Jenkins, а также отечественные платформы вроде Yandex Tracker CI и платформ Яндекс Облака.
¶Практическое применение
¶Конвейер (pipeline)
Центральное понятие CI/CD — конвейер (pipeline), последовательность автоматизированных стадий, через которые проходит каждый коммит. Стадии обычно выполняются последовательно, при ошибке на любой из них конвейер останавливается. Типовые стадии:
- Сборка (build) — компиляция, упаковка артефактов.
- Тестирование — модульные, интеграционные, сценарные тесты.
- Анализ качества — статический анализ, проверка защищённости.
- Доставка в тестовую среду.
- Развёртывание в производственную среду.
¶Инфраструктура как код
CI/CD тесно связан с практикой Infrastructure as Code (IaC): конфигурация серверов и сред описывается в коде (Terraform, Ansible, Puppet), что позволяет версионировать инфраструктуру и автоматически применять изменения через тот же конвейер.
¶GitOps
GitOps — подход, при котором состояние инфраструктуры и приложений декларативно описывается в Git-репозитории, а специальные агенты (Argo CD, Flux) автоматически синхронизируют реальное состояние с описанным.
¶Преимущества и риски
Основные преимущества CI/CD:
- сокращение времени выпуска изменений с недель и месяцев до часов;
- раннее выявление дефектов, что снижает стоимость их исправления;
- воспроизводимость сборок и развёртываний;
- повышение прозрачности процесса разработки.
Риски и сложности:
- высокая стоимость первоначального настройки конвейера и тестовой инфраструктуры;
- необходимость зрелой культуры тестирования — при слабых тестах автоматический выпуск усиливает регрессии;
- сложность отката при автоматическом развёртывании без надёжного механизма rollback;
- потенциальная уязвимость конвейеров как части цепочки поставки (атаки на системы CI/CD, компрометация зависимостей).
CI/CD стал стандартом индустрии разработки ПО и включён в рамки ряда стандартов качества, в частности ISO/IEC 29119 (тестирование программного обеспечения) и практик DevOps.
Источники:
- Хамбл Дж., Фарли Д. Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation. — 2010.
- Бек К. Extreme Programming Explained: Embrace Change. — 1999.
- Документация Jenkins, GitLab CI/CD, GitHub Actions.
- Буч Г. Object-Oriented Analysis and Design with Applications. — 1991.
