Что такое CI/CD


CI/CD (Continuous Integration / Continuous Delivery или Deployment) — это набор практик и принципов разработки программного обеспечения, направленных на автоматизацию и ускорение процессов сборки, тестирования, доставки и развёртывания приложений. Он помогает командам быстрее и надёжнее выпускать программный продукт, улучшая его качество и снижая риски, связанные с интеграцией изменений.

1. CI (Continuous Integration) — непрерывная интеграция

CI означает регулярное слияние кода от всех разработчиков в общую ветку (обычно main/master) с последующей автоматической сборкой и тестированием. Основные цели — быстро находить ошибки, минимизировать конфликт изменений и повышать стабильность.

Основные шаги CI:

  • Разработчик делает коммит и пушит изменения в репозиторий.

  • Триггерится CI-пайплайн:

    • Код собирается (build).

    • Выполняются юнит-тесты.

    • Производится анализ качества кода (lint, static analysis).

    • При необходимости — запускаются интеграционные и e2e тесты.

  • Если что-то не прошло — CI падает, и коммит считается "сломавшим" пайплайн.

Инструменты CI:

  • GitHub Actions

  • GitLab CI

  • Jenkins

  • Travis CI

  • CircleCI

  • Bitbucket Pipelines

Преимущества CI:

  • Быстрая обратная связь.

  • Быстрое обнаружение багов.

  • Автоматизированная проверка качества кода.

  • Меньше конфликтов между ветками и разработчиками.

2. CD (Continuous Delivery) — непрерывная доставка

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

Что делает система доставки:

  • Забирает артефакты (например, .jar, .zip, .docker image), полученные на стадии CI.

  • Разворачивает их на staging-окружение.

  • Запускает дополнительные тесты (smoke, UI-тесты).

  • Подготавливает деплой на продакшен: через кнопку, скрипт или автоматический триггер.

  • Сохраняет стабильность — не деплоит, если тесты не прошли.

Цель Continuous Delivery:

  • Возможность в любой момент выкатить рабочую версию на продакшен по нажатию кнопки.

3. CD (Continuous Deployment) — непрерывное развёртывание

Если в Continuous Delivery код доставляется, но финальный шаг требует ручного подтверждения, то в Continuous Deployment он полностью автоматизирован — всё, что прошло тесты, автоматически разворачивается в продакшен без участия человека.

Процесс CD:

  • После успешного CI:

    • Приложение деплоится на staging.

    • Если все проверки прошли — сразу деплоится на production.

    • Включаются health checks, canary deployments, мониторинг.

Когда это применимо:

  • Высокий уровень автоматизации.

  • Надёжные тесты.

  • Минимальный риск сбоев (или возможность быстро откатиться).

  • Небольшие, частые релизы.

4. Разница между Continuous Delivery и Continuous Deployment

Характеристика Continuous Delivery Continuous Deployment
Деплой на продакшен По запросу (manual) Автоматически
--- --- ---
Уровень автоматизации Высокий, но с ручным шагом Полная автоматизация
--- --- ---
Контроль релизов Больше Меньше (но быстрее и чаще)
--- --- ---
Подходит для Большинства команд Команд с высокой зрелостью CI/CD
--- --- ---

5. CI/CD pipeline — как выглядит полный процесс

[Код → Git push]

[CI: Сборка, Тесты, Анализ кода]

[CD: Сборка артефакта, Deploy на Staging]

[Auto-тесты на Staging]

[Deploy на Production]

Каждый шаг можно расширить:

  • Добавить уведомления (Slack, Telegram).

  • Вести логирование и мониторинг.

  • Делать canary deployments или blue/green deployments.

6. CI/CD и DevOps

CI/CD — важнейший компонент философии DevOps, объединяющей разработку и эксплуатацию. Она предполагает:

  • Автоматизацию жизненного цикла ПО.

  • Инфраструктуру как код (IaC).

  • Мониторинг и обратную связь после деплоя.

CI/CD делает релизы более частыми, предсказуемыми и менее рискованными.

7. Что можно автоматизировать в CI/CD

  • Проверка форматирования и линтинга.

  • Тесты всех уровней.

  • Сборка приложений (iOS, Android, Docker).

  • Сканирование зависимостей (безопасность).

  • Деплой в Kubernetes / облако / сервер.

  • Rollback / откат в случае ошибок.

  • Сбор метрик и алерты.

8. Проблемы при внедрении CI/CD

  • Нестабильные тесты (flaky tests).

  • Долгие пайплайны → медленная обратная связь.

  • Сложные окружения (несовместимость staging/prod).

  • Отсутствие культуры "малых изменений".

  • Отказ от CI/CD → медленные релизы, баги на проде.

9. Практики хорошего CI/CD

  • Мержить в main только через pull-request с проверками.

  • Поддерживать высокий процент тестов.

  • Минимизировать время сборки.

  • Делать small, incremental changes.

  • Настроить мониторинг после деплоя.

  • Обеспечить катастрофоустойчивость (канарейки, откаты, фича-флаги).

10. Примеры из практики

  • GitHub Actions → собирает, тестирует, деплоит Docker образ на AWS.

  • GitLab CI → с триггерами для staging и production с ручным подтверждением.

  • Jenkins + Spinnaker → продвинутый деплой в Kubernetes с автоскейлингом и rollout’ом.

CI/CD — это не просто автоматизация, это культура: коммит → проверка → релиз → уверенность.