Открыть сервисСервис

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 CDGitOpsДекларативное развёртывание в Kubernetes

В российской практике в качестве альтернатив западным облачным сервисам применяются, в частности, внутренние решения на базе Jenkins, а также отечественные платформы вроде Yandex Tracker CI и платформ Яндекс Облака.

Практическое применение

Конвейер (pipeline)

Центральное понятие CI/CD — конвейер (pipeline), последовательность автоматизированных стадий, через которые проходит каждый коммит. Стадии обычно выполняются последовательно, при ошибке на любой из них конвейер останавливается. Типовые стадии:

  1. Сборка (build) — компиляция, упаковка артефактов.
  2. Тестирование — модульные, интеграционные, сценарные тесты.
  3. Анализ качества — статический анализ, проверка защищённости.
  4. Доставка в тестовую среду.
  5. Развёртывание в производственную среду.

Инфраструктура как код

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.
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru