Что такое CI/CD
Разбираемся, что такое непрерывная интеграция и доставка
При современном ритме развития технологий скорость разработки программных продуктов стала критическим фактором. Разработка сейчас — это непрерывный процесс, состоящий из создания MVP, его тестирования, доработки, создания полноценного продукта, его масштабирования и т. д. Соответственно, методы разработки тоже должны развиваться. Так появился набор подходов, объединенных общим термином CI/CD. О нем и расскажем в статье.
Что такое CI/CD
CI/CD расшифровывается как Continuous Integration/Continuous Delivery — непрерывная интеграция и доставка. Иногда CD трактуют как Continuous Deployment — непрерывное развертывание. В зависимости от сложности проекта и задач, разработчики используют либо Continuous Delivery, либо сразу Deployment. Разберем подробнее:
- Непрерывная интеграция — публикация небольших изменений кода в репозитории несколько раз в день;
- Непрерывная доставка — автоматизированная интеграция изменений в тестовую среду (без автоматического развертывания на продакшн-сервер);
- Непрерывное развертывание — автоматический развертывание финальной сборки в в различные окружения, в том числе — для пользователей.
Agile (англ. «подвижный», «проворный») — гибкая методология разработки программного обеспечения, предполагающая итеративный подход. Основная идея в том, что команда, следующая принципам Agile, выполняет работу в рамках небольших инкрементов (этапов, повышающих ценность продукта), вместо того чтобы выпускать продукт целиком. Agile создавался, чтобы помочь командам быстрее и с меньшим количеством проблем поставлять ценность клиентам. При этом требования, планы и результаты оцениваются непрерывно, а значит команды могут быстро реагировать на изменения.
Непрерывная интеграция
При традиционном подходе в репозиторий выгружаются крупные блоки изменений, и происходит это не так часто. Непрерывная интеграция — это внесение изменений сразу же, даже небольших. Соответственно, она предполагает непрерывное, в идеале — автоматическое, тестирование. Таким образом, мелкие ошибки отсеиваются практически сразу, и разработчики продолжают работать с проверенным кодом. При традиционном подходе тестирование занимает значительно больше времени и может тормозить всю работу.
Непрерывная доставка
Изменения вносятся в репозиторий автоматически после проверки на ошибки и утверждения. Это позволяет тратить меньше времени на тестирование. Но при этом автоматического развертывания не происходит — разработчики должны принять изменения вручную.
Непрерывное развертывание
В традиционной разработке продукт может быть готов к использованию, но при внесении большого объема изменений есть вероятность, что он станет нестабильным. Так как по CI/CD мелкие изменения практически сразу тестируются и вносятся в проект, то вероятность критических ошибок значительно снижается. И если проект дошел до стадии готовности, то уже никакое изменение не откатит статус назад. При соблюдении принципа непрерывного развертывания все изменения после проверки вносятся в конечную версию автоматически.
Автоматизация
Автоматическое выполнение процессов — одна из главных черт CI/CD. Специальные инструменты позволяют автоматизировать практически все: загрузку изменений в репозиторий, проверку качества кода, тестирование, оповещение разработчиков о багах, развертывание приложения.
Преимущества CI/CD
- Высокая скорость разработки. Отлаженные процессы и автоматизация позволяют релизить продукты (выпускать новые версии для пользователей) гораздо быстрее — это особенно важно для сложных проектов. Продукт не устаревает, пока доставляется до пользователя, а разработчики могут быстро вносить изменения после «живого» тестирования.
- Возможности для тестирования. Благодаря параллельной разработке и быстрым релизам можно создавать несколько версий продукта для проверки гипотез.
- Оптимизация рутинных операций. Сборку, проверку багов, развертывание можно возложить на инструменты автоматизации. Это освободит время специалистов и минимизирует человеческий фактор. Но такая автоматизация сама по себе дорогая в реализации, поэтому имеет смысл только для больших и сложных проектов, либо при заказной разработке.
Иван
Технический директор Сибирикс
Если настройка всего пайплайна автоматизации уже отработана и выполняется достаточно быстро — то почему бы и не использовать такое на всех, даже на мелких, проектах? У нас CI/CD с разворачиванием сайтов на DEV’е работает вообще для всех сайтов.
- Гибкий план работ. Любые изменения в первоначальных планах не застанут врасплох — CI/CD предполагает работу итерацияминциями, после каждой формируется новый список задач и необходимых для их выполнения ресурсов.
Основные принципы CI/CD
Основа успешной реализации подхода CI/CD — подготовительная работа с командой по следующим принципам:
- Разделение ответственности. Необходимо зафиксировать, кто именно несет ответственность за ту или иную функцию или этап разработки. На основе этого составляется план работ с указанием ответственных.
- Снижение рисков. Каждый участник разработки следит за соблюдением правил, проверяет бизнес-логику, участвует в устранении багов. Также снижение рисков подразумевает автоматизацию для исключения человеческого фактора.
- Короткий цикл обратной связи. Очень важно максимальное сокращение срока между внесением изменений в конечный продукт и получением обратной связи. Это позволяет выявить проблемы на ранней стадии и сразу их исправить. Для этого используются как инструменты автоматизации, так и специально разработанные алгоритмы обмена обратной связью.
- Общая среда разработки. Так как при CI/CD процессы идут параллельно, каждый участник должен понимать, что делают остальные, и на каком этапе находится проект. Для упрощения используются единые ресурсы: инструменты разработки, таск-трекер, мессенджеры и т. д.
Этапы работы по CI/CD
Иван
Технический директор Сибирикс
CI/CD — это не отдельная методология, а просто набор скриптов, который автоматизирует ЛЮБОЙ процесс разработки. Соответственно и использовать его можно с практически любой методологией разработки.
Важно помнить, что CI/CD — это не полноценная методология разработки. Это вспомогательные скрипты к любому процессу разработки. Тут не нужен этап планирования. По большому счёту CI/CD влияет только на:
- написание кода
- сборку
- тестирование
- деплой на сервера
1. Написание кода
Для начала нужно создать репозиторий в выбранной системе контроля версий, например мы используем Git. Репозиторий — это по сути хранилище, где будут собраны все материалы по проекту. Для репозитория можно установить уровни доступа.
В CI/CD разработка происходит по модели ветвления — существует основная ветвь с проверенным стабильным кодом и ветки разработчиков. Ветвление позволяет вести параллельную разработку нескольких функций, не мешая остальным.
Каждый участник проекта или команда создает свой участок кода, тестирует его и запрашивает слияние с основной веткой. На этом этапе принимается обратная связь и исправляются баги, после чего изменения интегрируются в основную ветвь.
Инструменты: Git — наиболее популярная система контроля версий, использующая модель ветвления.
В CI/CD разработка происходит по модели ветвления — существует основная ветвь с проверенным стабильным кодом и ветки разработчиков. Ветвление позволяет вести параллельную разработку нескольких функций, не мешая остальным.
Каждый участник проекта или команда создает свой участок кода, тестирует его и запрашивает слияние с основной веткой. На этом этапе принимается обратная связь и исправляются баги, после чего изменения интегрируются в основную ветвь.
Инструменты: Git — наиболее популярная система контроля версий, использующая модель ветвления.
2. Сборка
Когда изменения приняты, система контроля версий инициирует сборку. Для инициации используются триггеры — например, внесение изменений в основную ветку. Сборку можно настроить по расписанию или с определенной периодичностью. На этом же этапе собранный код проходит автоматическую проверку на работоспособность, и если были найдены баги, то дорабатывается.
Инструменты: Jenkins — программа для автоматизации сборки, тестирования и развертывания продуктов.
Альтернативы: GitLab, Bitbucket Pipelines, Netlify.
Инструменты: Jenkins — программа для автоматизации сборки, тестирования и развертывания продуктов.
Альтернативы: GitLab, Bitbucket Pipelines, Netlify.
3. Тестирование
После прохождения автоматической проверки и устранения багов сборка отправляется к тестировщикам для ручного тестирования. Они проверяют все модули, их взаимосвязи и работу продукта в целом. По результатам тестирования составляется список доработок — баглист. Так продолжается до тех пор, пока все доработки не будут учтены — тогда сборка релизится, то есть, выгружается уже предназначенный для пользователей код.
Инструменты: Языков программирования — много, для каждого есть больше одного фреймворка для тестирования, список возможных инструментов будет огромным.
Инструменты: Языков программирования — много, для каждого есть больше одного фреймворка для тестирования, список возможных инструментов будет огромным.
4. Релиз
Появление рабочего кода — это промежуточный этап полного цикла CI/CD. Здесь оценивается эффективность работы команды — на основе выполненных задач или метрик в таск-менеджерах. Так можно оценить, сколько времени занимает работа над конкретной функцией или этапом. Но разработка — это не только работа технических специалистов, но еще и сбор обратной связи от пользователей, поэтому цикл продолжается.
5. Развертывание
Рабочий код публикуется на продакшн-серверах и становится доступен пользователям. Для автоматизации развертывания можно использовать те же инструменты, что и для сборки. Но нужно оценивать сложность процесса — не всегда его полностью можно провести автоматически. Так, например, для полноценного развертывания маркетплейса нужно настроить интеграции со сторонними сервисами, подключить чат-боты и тикет-систему, создать события для отслеживания и т.д.
Инструменты: Jenkins — программа для автоматизации сборки, тестирования и развертывания продуктов.
Альтернативы: GitLab, Bitbucket Pipelines, Netlify.
ПО для развертывания в облаке: Инструменты для развёртывания зависят от используемого стека технологий в проекте.
Инструменты: Jenkins — программа для автоматизации сборки, тестирования и развертывания продуктов.
Альтернативы: GitLab, Bitbucket Pipelines, Netlify.
ПО для развертывания в облаке: Инструменты для развёртывания зависят от используемого стека технологий в проекте.
Конечно, этот порядок не ультимативен, можно менять его по своему усмотрению или исключать отдельные этапы. Главное, чем следует руководствоваться — это логика и принципы СI/CD.
Когда CI/CD не подойдет
Конечно, ни одна методология не является панацеей, и CI/CD — не исключение. Есть случаи, когда она не подойдет:
- Никто из вашей команды не работал по CI/CD или Agile. Если никто не работал — значит надо назначить крайнего, кто разберётся и внедрит. Но без опыта вы потратите время на обучение процессам и налаживание коммуникаций. На небольших проектах это может быть нецелесообразно.
- Степень сплоченности команды невысока. СI/CD — прежде всего, командная работа, где каждый несет определенную ответственность, следит за общим проектом и готов договариваться в сложных ситуациях. При слабо налаженной коммуникации успешная разработка по CI/CD невозможна.
- Участники команды не очень опытны. CI/CD — это гибкость и быстрое внедрение доработок. Каждый разработчик должен ориентироваться в своей области как рыба в воде, чтобы соответствовать темпу подхода.
Недостатки подхода
Непрерывные изменения значительно ускоряют разработку, но иногда заставляют упускать из виду важные моменты. Например, изменения в логике интерфейса обязательно должны проходить пользовательское тестирование. Из-за высокой скорости разработки некоторые идеи, которые понравились бы пользователям, могут быть отброшены как неудачные.
К тому же, как мы упоминали, CI/CD обеспечивает непрерывное развертывание — а значит, служба поддержки может просто не успевать за изменениями продукта, и пользователям придется дольше ждать ответа.
К тому же, как мы упоминали, CI/CD обеспечивает непрерывное развертывание — а значит, служба поддержки может просто не успевать за изменениями продукта, и пользователям придется дольше ждать ответа.
Перспективы использования CI/CD
На данный момент этот подход обеспечивает самые короткие сроки разработки и внесения изменений. Конкурентов у нее пока что нет, это оптимальное решение для быстрого запуска MVP и последующей доработки.
Иван
Технический директор Сибирикс
Просто потому, что CI/CD — это когда всё автоматизировано… Очевидно, что когда не автоматизировано — получается медленно. Основная цель автоматизации — как раз ускорение процессов.
Удобно, что для CI/CD разработано множество инструментов, которые позволяют максимально автоматизировать процессы. Для работы по CI/CD обязательно нужна профессиональная команда и отличная коммуникация — в противном случае сроки разработки могут, наоборот, затянуться.