Как работает CI/CD — набор скриптов, который автоматизирует любой процесс разработки
Что такое CI/CD?
Сибирикс

Что такое CI/CD

Разбираемся, что такое непрерывная интеграция и доставка
При современном ритме развития технологий скорость разработки программных продуктов стала критическим фактором. Разработка сейчас — это непрерывный процесс, состоящий из создания MVP, его тестирования, доработки, создания полноценного продукта, его масштабирования и т. д. Соответственно, методы разработки тоже должны развиваться. Так появился набор подходов, объединенных общим термином CI/CD. О нем и расскажем в статье.

Что такое CI/CD

CI/CD расшифровывается как Continuous Integration/Continuous Delivery — непрерывная интеграция и доставка. Иногда CD трактуют как Continuous Deployment — непрерывное развертывание. В зависимости от сложности проекта и задач, разработчики используют либо Continuous Delivery, либо сразу Deployment. Разберем подробнее:

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

Таким образом, CI/CD относится к DevOps-практикам и ускоряет разработку за счет процесса внесения изменений. Это делает подход практически универсальным и позволяет нескольким разработчикам или командам работать параллельно. С этой точки зрения можно отнести CI/CD к практикам Agile.
Agile (англ. «подвижный», «проворный») — гибкая методология разработки программного обеспечения, предполагающая итеративный подход. Основная идея в том, что команда, следующая принципам Agile, выполняет работу в рамках небольших инкрементов (этапов, повышающих ценность продукта), вместо того чтобы выпускать продукт целиком. Agile создавался, чтобы помочь командам быстрее и с меньшим количеством проблем поставлять ценность клиентам. При этом требования, планы и результаты оцениваются непрерывно, а значит команды могут быстро реагировать на изменения.

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

При традиционном подходе в репозиторий выгружаются крупные блоки изменений, и происходит это не так часто. Непрерывная интеграция — это внесение изменений сразу же, даже небольших. Соответственно, она предполагает непрерывное, в идеале — автоматическое, тестирование. Таким образом, мелкие ошибки отсеиваются практически сразу, и разработчики продолжают работать с проверенным кодом. При традиционном подходе тестирование занимает значительно больше времени и может тормозить всю работу.

Непрерывная доставка

Изменения вносятся в репозиторий автоматически после проверки на ошибки и утверждения. Это позволяет тратить меньше времени на тестирование. Но при этом автоматического развертывания не происходит — разработчики должны принять изменения вручную.

Непрерывное развертывание

В традиционной разработке продукт может быть готов к использованию, но при внесении большого объема изменений есть вероятность, что он станет нестабильным. Так как по CI/CD мелкие изменения практически сразу тестируются и вносятся в проект, то вероятность критических ошибок значительно снижается. И если проект дошел до стадии готовности, то уже никакое изменение не откатит статус назад. При соблюдении принципа непрерывного развертывания все изменения после проверки вносятся в конечную версию автоматически.

Автоматизация

Автоматическое выполнение процессов — одна из главных черт CI/CD. Специальные инструменты позволяют автоматизировать практически все: загрузку изменений в репозиторий, проверку качества кода, тестирование, оповещение разработчиков о багах, развертывание приложения.

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

  • Высокая скорость разработки. Отлаженные процессы и автоматизация позволяют релизить продукты (выпускать новые версии для пользователей) гораздо быстрее — это особенно важно для сложных проектов. Продукт не устаревает, пока доставляется до пользователя, а разработчики могут быстро вносить изменения после «живого» тестирования.
  • Возможности для тестирования. Благодаря параллельной разработке и быстрым релизам можно создавать несколько версий продукта для проверки гипотез.
  • Оптимизация рутинных операций. Сборку, проверку багов, развертывание можно возложить на инструменты автоматизации. Это освободит время специалистов и минимизирует человеческий фактор. Но такая автоматизация сама по себе дорогая в реализации, поэтому имеет смысл только для больших и сложных проектов, либо при заказной разработке.

Иван
Технический директор Сибирикс
Если настройка всего пайплайна автоматизации уже отработана и выполняется достаточно быстро — то почему бы и не использовать такое на всех, даже на мелких, проектах? У нас CI/CD с разворачиванием сайтов на DEV’е работает вообще для всех сайтов.
  • Гибкий план работ. Любые изменения в первоначальных планах не застанут врасплох — CI/CD предполагает работу итерацияминциями, после каждой формируется новый список задач и необходимых для их выполнения ресурсов.

Основные принципы CI/CD

Основа успешной реализации подхода CI/CD — подготовительная работа с командой по следующим принципам:

  1. Разделение ответственности. Необходимо зафиксировать, кто именно несет ответственность за ту или иную функцию или этап разработки. На основе этого составляется план работ с указанием ответственных.

  2. Снижение рисков. Каждый участник разработки следит за соблюдением правил, проверяет бизнес-логику, участвует в устранении багов. Также снижение рисков подразумевает автоматизацию для исключения человеческого фактора.

  3. Короткий цикл обратной связи. Очень важно максимальное сокращение срока между внесением изменений в конечный продукт и получением обратной связи. Это позволяет выявить проблемы на ранней стадии и сразу их исправить. Для этого используются как инструменты автоматизации, так и специально разработанные алгоритмы обмена обратной связью.

  4. Общая среда разработки. Так как при CI/CD процессы идут параллельно, каждый участник должен понимать, что делают остальные, и на каком этапе находится проект. Для упрощения используются единые ресурсы: инструменты разработки, таск-трекер, мессенджеры и т. д.

Этапы работы по CI/CD


Иван
Технический директор Сибирикс
CI/CD — это не отдельная методология, а просто набор скриптов, который автоматизирует ЛЮБОЙ процесс разработки. Соответственно и использовать его можно с практически любой методологией разработки.

Важно помнить, что CI/CD — это не полноценная методология разработки. Это вспомогательные скрипты к любому процессу разработки. Тут не нужен этап планирования. По большому счёту CI/CD влияет только на:

  1. написание кода
  2. сборку
  3. тестирование
  4. деплой на сервера
При этом CI/CD просто облегчает и автоматизирует эти этапы. Некоторые источники предлагают рассматривать разработку по CI/CD как набор этапов образующих цикл (итерацию). Расскажем, как можно максимально автоматизировать процессы на каждом шаге и какие инструменты для этого использовать.

1. Написание кода

Для начала нужно создать репозиторий в выбранной системе контроля версий, например мы используем Git. Репозиторий — это по сути хранилище, где будут собраны все материалы по проекту. Для репозитория можно установить уровни доступа.

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

Каждый участник проекта или команда создает свой участок кода, тестирует его и запрашивает слияние с основной веткой. На этом этапе принимается обратная связь и исправляются баги, после чего изменения интегрируются в основную ветвь.

Инструменты: Git — наиболее популярная система контроля версий, использующая модель ветвления.

2. Сборка

Когда изменения приняты, система контроля версий инициирует сборку. Для инициации используются триггеры — например, внесение изменений в основную ветку. Сборку можно настроить по расписанию или с определенной периодичностью. На этом же этапе собранный код проходит автоматическую проверку на работоспособность, и если были найдены баги, то дорабатывается.

Инструменты: Jenkins — программа для автоматизации сборки, тестирования и развертывания продуктов.

Альтернативы: GitLab, Bitbucket Pipelines, Netlify.

3. Тестирование

После прохождения автоматической проверки и устранения багов сборка отправляется к тестировщикам для ручного тестирования. Они проверяют все модули, их взаимосвязи и работу продукта в целом. По результатам тестирования составляется список доработок — баглист. Так продолжается до тех пор, пока все доработки не будут учтены — тогда сборка релизится, то есть, выгружается уже предназначенный для пользователей код.

Инструменты: Языков программирования — много, для каждого есть больше одного фреймворка для тестирования, список возможных инструментов будет огромным.

4. Релиз

Появление рабочего кода — это промежуточный этап полного цикла CI/CD. Здесь оценивается эффективность работы команды — на основе выполненных задач или метрик в таск-менеджерах. Так можно оценить, сколько времени занимает работа над конкретной функцией или этапом. Но разработка — это не только работа технических специалистов, но еще и сбор обратной связи от пользователей, поэтому цикл продолжается.

5. Развертывание

Рабочий код публикуется на продакшн-серверах и становится доступен пользователям. Для автоматизации развертывания можно использовать те же инструменты, что и для сборки. Но нужно оценивать сложность процесса — не всегда его полностью можно провести автоматически. Так, например, для полноценного развертывания маркетплейса нужно настроить интеграции со сторонними сервисами, подключить чат-боты и тикет-систему, создать события для отслеживания и т.д.

Инструменты: Jenkins — программа для автоматизации сборки, тестирования и развертывания продуктов.

Альтернативы: GitLab, Bitbucket Pipelines, Netlify.

ПО для развертывания в облаке: Инструменты для развёртывания зависят от используемого стека технологий в проекте.
Конечно, этот порядок не ультимативен, можно менять его по своему усмотрению или исключать отдельные этапы. Главное, чем следует руководствоваться — это логика и принципы СI/CD.

Когда CI/CD не подойдет

Конечно, ни одна методология не является панацеей, и CI/CD — не исключение. Есть случаи, когда она не подойдет:

  • Никто из вашей команды не работал по CI/CD или Agile. Если никто не работал — значит надо назначить крайнего, кто разберётся и внедрит. Но без опыта вы потратите время на обучение процессам и налаживание коммуникаций. На небольших проектах это может быть нецелесообразно.
  • Степень сплоченности команды невысока. СI/CD — прежде всего, командная работа, где каждый несет определенную ответственность, следит за общим проектом и готов договариваться в сложных ситуациях. При слабо налаженной коммуникации успешная разработка по CI/CD невозможна.
  • Участники команды не очень опытны. CI/CD — это гибкость и быстрое внедрение доработок. Каждый разработчик должен ориентироваться в своей области как рыба в воде, чтобы соответствовать темпу подхода.

Недостатки подхода

Непрерывные изменения значительно ускоряют разработку, но иногда заставляют упускать из виду важные моменты. Например, изменения в логике интерфейса обязательно должны проходить пользовательское тестирование. Из-за высокой скорости разработки некоторые идеи, которые понравились бы пользователям, могут быть отброшены как неудачные.

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

Перспективы использования CI/CD

На данный момент этот подход обеспечивает самые короткие сроки разработки и внесения изменений. Конкурентов у нее пока что нет, это оптимальное решение для быстрого запуска MVP и последующей доработки.

Иван
Технический директор Сибирикс
Просто потому, что CI/CD — это когда всё автоматизировано… Очевидно, что когда не автоматизировано — получается медленно. Основная цель автоматизации — как раз ускорение процессов.
Удобно, что для CI/CD разработано множество инструментов, которые позволяют максимально автоматизировать процессы. Для работы по CI/CD обязательно нужна профессиональная команда и отличная коммуникация — в противном случае сроки разработки могут, наоборот, затянуться.