Что такое методология разработки CI/CD

28 Мая 2021

Быстрая и качественная сборка программного продукта – это то, к чему стремятся все разработчики ПО. Когда над проектом работает крупная команда и нужно вносить правки в код ежедневно, каскадная модель разработки софта не подойдет. В этом случае используют методологию CI/CD. Она позволяет осуществлять одновременное тестирование и доставку кода в проект.

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

Основные принципы Continuous Integration/Continuous Delivery

ci-cd-1.jpgCI/CD – это методология, построенная на комбинации непрерывной интеграции, доставки и тестирования кода при разработке приложений. Но, прежде чем разбираться в её особенностях, нужно изучить continuous integration и continuous delivery – что это подходы и когда они применяются.

Непрерывная интеграция (CI) заключается в постоянном слиянии рабочих копий софта в одну основную общую ветвь разработки. Этот подход относится к экстремальному программированию. Использование непрерывной интеграции способствует сокращению сроков разработки ПО.

Непрерывная доставка (CD) – это подход, при котором при любых изменениях в коде происходит сборка и тестирование продукта. Использование этой практики позволяет разработчикам осуществлять разноплановую проверку новых версий ПО перед развертыванием для пользователей.

Базируется CICD на 4 основных принципах:

  1. Разделение ответственности сторон. Участники процесса разработки и конечные потребители продукта (пользователи) сегрегируют ответственность за конкретный этап жизненного цикла ПО. Дизайнеры разрабатывают интуитивно-понятный пользовательский интерфейс, разработчики занимаются бизнес-логикой софта. Инженеры по качеству работают над приемочными тестами и сквозными функциями, а DevOps-инженеры занимаются логистикой кода. От пользователей же требуется своевременно давать обратную связь по изменениям в проекте.
  2. Снижение риска. Участники процесса разделены на группы, благодаря чему снижаются общие и специфические риски на всех этапах жизненного цикла ПО.
  3. Короткий цикл обратной связи. При разработке коммерческого софта скорость реакции на фидбэк от пользователей влияет на конкурентоспособность проекта. Сборка и тестирование кода должны быть автоматизированными, но часто для принятия решений требуется участие человека. В этом случае автоматизация может навредить, поэтому рекомендуется сократить количество информационных посредников.
  4. Реализация среды. Команде нужно единое рабочее окружение для контроля версий и создания вспомогательных веток для контроля качества, масштабируемости, отказоустойчивости, приемлемости создаваемого кода. Протестированные модули должны перемещаться в основную ветку проекта для дальнейшего тестирования и сборки в основную версию ПО. На финальных тестах код оценивается на безопасность.
Удаленный офис
и онлайн-продажи
За 1 день.
С бесплатным тестовым периодом.
Конфигуратор удаленных рабочих мест
Рабочие места для команды за 1 день

Этапы разработки программного продукта по CI/CD

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

Сборка. Система контроля версией запускает автосборку и тестирование проекта. Триггеры для старта сборка настраиваются индивидуально. Это может быть определенной запрос, конкретная дата и т. д. Для автосборки используется Buildbot или другое аналогичное решение.

Ручное тестирование. После того, как система автоматической интеграции подтвердила работоспособность собранного ПО, код отправляется к тестировщикам. Тестовой сборке присваивается определенный номер. Например, v 2.0.0.4-2.

Релиз. Сборка получает исправления после проверки тестировщиками, и итоговый номер версии меняется. К примеру, она была v 2.0.0.4-2, а после исправлений станет v 2.0.0.4-3. После внесения всех исправлений выпускается клиентская версия продукта (v 2.0.0.4), а цикл переходит к следующему этапу.

Развертывание. Версия ПО для клиентов автоматически публикуется на всех продакшн-серверах. Пользователи получают доступ к софту.

Поддержка и мониторинг. Пользователи знакомятся с программным обеспечением, тестируют и оценивают его функционал. Разработчики поддерживают софт, собирают и анализируют обратную связь от клиентов.

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

Преимущества непрерывной интеграции и непрерывного развертывания

ci-cd-2.jpgБольшинство программистов DevOps CI/CD используют для реализации всех проектов. Главные преимущества методологии:

  • Быстрое обновление программного кода. Все изменения вносятся за считанные часы. Разработчики могут внедрять новые функции в софт каждые 2-3 недели. Автоматическое тестирование кода позволяет снизить количество ошибок и критических багов. Все проблемы, обнаруженные во время тестов, оперативно исправляются.
  • Быстрая проверка идей. Новые функции для сайта или приложения, игровые ивенты и другие обновления можно быстро протестировать без внесения изменений в актуальную версию ПО.
  • Более высокое качество итогового программного обеспечения. Ошибки, баги, потенциальные слабые места софта ликвидируются ещё на этапе тестирования. Множество аналитических инструментов позволяют сравнить данные разных версий ПО и выбрать более оптимальные, стабильные решения. Все это повышает качество разработки.

Недостатки методологии

Самый главный минус CI/CD – необходимость наладить идеальное взаимодействие между разными командами и отделами. Инженеры, программисты DevOps, scrum-мастера и руководители компании должны быстро передавать друг другу результаты работы, правки, информацию о выявленных багах и т. д. На разработку сильно влияет человеческий фактор и согласованность действий всех команд.

Инструменты для CI/CD

Разработчики софта применяют разные инструменты для тестирования и доставки кода в проекты. Рассмотрим самые популярные из них.

GitLab. Веб-инструмент предоставляет возможность управлять проектными репозиториями, описывать функциональность ПО, сохранять результаты тестов и доработок. Пользователи могут работать с собственным хостингом на любом тарифном плане, работать с CI/CD pipeline.

Jenkins. Популярная среди разработчиков программная система с открытым кодом. Jenkins может работать с разными плагинами и позволяет точно настроить CICD-процессы под конкретный проект.

Docker. ПО для автоматического развертывания приложений. Docker позволяет упаковать проект в контейнер вместе с окружением и зависимостями для переноса в Linux-систему. Программное обеспечение поддерживает контейнеризацию. В последних версиях ПО была реализована поддержка MacOS и Windows.

Buildbot. Инструмент для непрерывной интеграции с поддержкой современных VCS. По сути является фреймворком на Python для CI, а не готовым решением. Благодаря этому сборку можно настроить под конкретный проект.

Rex. Работает на Perl-скриптах. Программная платформа предназначена для автоматизации процессов непрерывной интеграции в ЦОД.

PHP Censor. Еще один инструмент для непрерывной интеграции. Он представляет собой сервер, автоматизирующий сборку PHP-проектов. Преимуществу у PHP Censor много. Он поддерживает GitHub, GitLab, Mercurial, SVN, Git и другие репозитории. Может проверять исходники при помощи HPDocblockChecker, PHPLoc, Lint и т. д.

Travis-CI. Облачный веб-сервис для сборки и тестирования ПО. Не требует отдельной установки. Разработчики open-source проектов могут пользоваться им бесплатно.

TeamCity. Серверное ПО для поддержки непрерывной интеграции. Позволяет проводить грид-сборку проекта, тестировать код перед коммитом. Поддерживает Git, Mercurial, CVS, Subversion, Perforce и другими репозиториями. В бесплатном режиме можно работать только с тремя агентами без техподдержки.

Circle-CI. Сервис непрерывной сборки и деплоя ПО. Поддерживает интеграцию с GitHub. Простая настройка тестов через веб-интерфейс. Тем же можно отслеживать версии сборок. Есть возможность настроить отправку оповещений через электронную почту, Телеграмм и другие каналы связи.

Open Build Service (OBS). Полноценная платформа для полной разработки программных продуктов по технологии CICD. Позволяет собирать Deb и RPM для дистрибутивов Linux.

Заключение

У CI/CD-методологии есть много преимуществ: высокая скорость разработки приложений, снижение количества ошибок при сборке ПО, быстрое получение обратной связи, возможность протестировать идею без внедрения существенных изменений в проект. Но при таком подходе важно иметь специалиста, который будет все координировать. Обычно этим занимается DevOps-инженер. Этот специалист оптимизирует все этапы разработки софта и обеспечивает согласованную работу всей команды.

Популярные услуги
Получить консультацию специалиста
Персональный ассистент
Cloud.Xelent