Что такое CI и CD и зачем они нужны

Разбираемся, что скрывается за аббревиатурами CI и CD и почему без них больно.

CI (Continuous Integration) — практика, при которой изменения каждого разработчика автоматически собираются и тестируются при каждом пуше, чтобы ломающие изменения находились за минуты, а не за дни.

Жизнь без автоматизации

Представьте команду без CI/CD. Разработчик закончил фичу, локально «вроде работает», вливает её в основную ветку. Через неделю выясняется, что сборка давно сломана, тесты никто не запускал, а выкладка на прод — это ручной набор команд по памяти на ночь пятницы. Каждый релиз — стресс и ритуал.

Типичные боли ручного процесса:

  • «У меня работает». Код зависит от локального окружения, на чистой машине ломается.
  • Поздняя интеграция. Конфликты и баги находят через дни после написания кода, когда контекст забыт.
  • Хрупкий деплой. Выкладка вручную = человеческий фактор, забытый шаг, разный результат у разных людей.
  • Нет единого источника правды. Никто не уверен, проходят ли тесты на текущем состоянии main.

CI: непрерывная интеграция

Continuous Integration отвечает на вопрос «можно ли вообще брать этот код?». На каждый пуш и каждый pull request автоматически: скачивается код, ставятся зависимости, собирается проект, прогоняются линтер и тесты. Если что-то красное — автор узнаёт об этом за минуты, прямо в PR, до ревью и до мержа.

Главная идея: интегрировать изменения часто и маленькими порциями, и пусть машина каждый раз проверяет, что мир не сломался.

CD: доставка и развёртывание

Под аббревиатурой CD прячутся два близких, но разных понятия:

Continuous DeliveryПосле успешного CI артефакт автоматически готов к выкладке, но финальный «деплой на прод» запускает человек одной кнопкой.
Continuous DeploymentКаждое прошедшее проверки изменение выкатывается на прод автоматически, без ручного шага.

Разница — в наличии ручного подтверждения перед продом. Многие команды делают непрерывную доставку (delivery) с ручным апрувом и при росте доверия к тестам переходят к деплойменту.

Зачем это нужно

Цель всего курса — автоматизировать всё от пуша до прода. Когда конвейер настроен, вы получаете:

  • быструю обратную связь: сломал — узнал сразу;
  • повторяемость: сборка и деплой одинаковы у всех и всегда;
  • смелость релизить часто, потому что выкладка дешёвая и предсказуемая;
  • живую документацию процесса в виде кода в репозитории.

Итог

  • CI автоматически собирает и тестирует код на каждое изменение.
  • Continuous Delivery готовит релиз и ждёт кнопку; Continuous Deployment катит сам.
  • Цель — короткий и надёжный путь от коммита до пользователя.
Проверьте себя
1. Чем Continuous Delivery отличается от Continuous Deployment?
AНичем, это синонимы
BВ Delivery есть ручной шаг подтверждения перед продом, в Deployment выкладка полностью автоматическая
CDelivery про тесты, Deployment про сборку
DDeployment работает только с Docker
2. Какую проблему в первую очередь решает CI?
AУскоряет интернет на сервере
BЗаменяет систему контроля версий
CДаёт быструю автоматическую проверку, что изменения не ломают сборку и тесты
DПишет код за разработчика
3. Что означает фраза «интегрировать часто и маленькими порциями»?
AВливать изменения редко, но большими кусками
BЧасто сливать небольшие изменения, чтобы машина проверяла их и конфликты находились рано
CДеплоить только по пятницам
DОтключать тесты ради скорости
Поддержать проект