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

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) — последовательность этапов, через которые проходит код от коммита до развёртывания. Типичный конвейер включает:

  1. Сборку проекта (компиляция, упаковка артефактов).
  2. Автоматическое тестирование — юнит-тесты, интеграционные тесты, проверки стиля кода.
  3. Статический анализ (linting) и проверку безопасности зависимостей.
  4. Развёртывание на тестовый (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 CDGitOps-инструментДекларативное развёртывание в 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.
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru