Быстрая и качественная сборка программного продукта – это то, к чему стремятся все разработчики ПО. Когда над проектом работает крупная команда и нужно вносить правки в код ежедневно, каскадная модель разработки софта не подойдет. В этом случае используют методологию CI/CD. Она позволяет осуществлять одновременное тестирование и доставку кода в проект.
Методология идеально подходит для микросервисных ПО. CI/CD также можно адаптировать для разработки программ с другими типами архитектуры. В сравнении с каскадной методикой использование непрерывной интеграции значительно снижает количество ошибок во время разработки. Все проблемы с совместимостью компонентов выявляются ещё на стадии создания ПО, что снижает трудоемкость работы и сокращает сроки реализации проекта.
CI/CD – это методология, построенная на комбинации непрерывной интеграции, доставки и тестирования кода при разработке приложений. Но, прежде чем разбираться в её особенностях, нужно изучить continuous integration и continuous delivery – что это подходы и когда они применяются.
Непрерывная интеграция (CI) заключается в постоянном слиянии рабочих копий софта в одну основную общую ветвь разработки. Этот подход относится к экстремальному программированию. Использование непрерывной интеграции способствует сокращению сроков разработки ПО.
Непрерывная доставка (CD) – это подход, при котором при любых изменениях в коде происходит сборка и тестирование продукта. Использование этой практики позволяет разработчикам осуществлять разноплановую проверку новых версий ПО перед развертыванием для пользователей.
Базируется CICD на 4 основных принципах:
Написание кода. Каждый разработчик пишет код собственного модуля, вручную тестирует его, и только затем присоединяет к нынешней версии проекта в основной ветке. Для контроля версий используют 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), а цикл переходит к следующему этапу.
Развертывание. Версия ПО для клиентов автоматически публикуется на всех продакшн-серверах. Пользователи получают доступ к софту.
Поддержка и мониторинг. Пользователи знакомятся с программным обеспечением, тестируют и оценивают его функционал. Разработчики поддерживают софт, собирают и анализируют обратную связь от клиентов.
Планирование. На этом этапе на основании собранной информации разработчики составляют план доработок. После этого цикл считается замкнутым. Новый цикл начинается с написания кода и далее проходит по всем остальным этапам.
Большинство программистов DevOps CI/CD используют для реализации всех проектов. Главные преимущества методологии:
Самый главный минус CI/CD – необходимость наладить идеальное взаимодействие между разными командами и отделами. Инженеры, программисты DevOps, scrum-мастера и руководители компании должны быстро передавать друг другу результаты работы, правки, информацию о выявленных багах и т. д. На разработку сильно влияет человеческий фактор и согласованность действий всех команд.
Разработчики софта применяют разные инструменты для тестирования и доставки кода в проекты. Рассмотрим самые популярные из них.
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-инженер. Этот специалист оптимизирует все этапы разработки софта и обеспечивает согласованную работу всей команды.