61 подписчик

CI/CD простыми словами

Несложно догадаться, что основной целью любого ПО, как правило, является зарабатывание денег за счет автоматизации каких-либо бизнес-процессов. Чем быстрее компания выпускает новые версии для клиентов, тем лучше. Возникает вопрос, как быстро наладить процесс релизов? Как один из вариантов — залезть на удаленный сервер, клонировать репозиторий с обновлениями, выполнить сборку и запустить. Работать будет, но эффективен ли такой подход? Для нас данный набор действий очень быстро превратится в рутину, поэтому вполне логично было бы его автоматизировать. CI/CD (Continuous Integration, Continuous Delivery — непрерывная интеграция и доставка) — одна из наиболее распространенных практик DevOps, которая позволяет автоматизировать тестирование и доставку новых модулей разрабатываемого продукта заинтересованным в нем лицам: аналитикам, конечным пользователям, инженерам качества и т. д.

Непрерывная интеграция (Continuous Integration, CI)

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

Начнем с проверки кода на ошибки: при каждом открытии Pull Request сервер Git будет уведомлять сервер CI. CI-сервер клонирует репозиторий, извлекает из новой ветки исходники и объединяет с master (main), после чего запускает сборку. Сборка может завершиться успешно или же с ошибкой — результат отправляется на сервер Git. При успешном завершении сборки разрешается merge, в противном случае слияние блокируется. Таким образом, данный процесс гарантирует, что любой код, поступающий в основную ветку, не нарушит дальнейшие сборки. По такому же принципу можно проверить тестовое покрытие для предстоящих изменений, а также проверить форматирование кода.

Непрерывная доставка (Continuous Delivery, CD)

Непрерывная доставка описывает процесс автоматического развертывания новой версии продукта. Задание CD создает проект (или повторно использует артефакты, созданные на этапе CI) и развертывает его на конечном сервере. После завершения этапа развертывания обычно отправляются уведомления об успешном или неудачном развертывании. Задания CD могут запускаться после каждого мерджа Pull Request, по расписанию или по любому другому триггеру, который будет удобен в рамках конкретного проекта. Важно понимать, что развертывание (deploy) не всегда означает, что что-то где-то запускается. Например, в случае разработки какой-либо библиотеки процесс развертывания будет означать выпуск новой версии этой библиотеки.

В условиях жесткой конкуренции данная методология позволяет в разы сократить время от разработки кода до релиза продукта. CI/CD прекрасно подходит для задач, касающихся веб-разработки, e-commerce и прочего комплекса frontend- и middleware-компонентов. Однако это не значит, что CI/CD нужно бежать и срочно внедрять в свой продукт, данный подход может быть оправдан не всегда — например, в сферах с редкими обновлениями ПО тема становится менее актуальной.

Этапы CI/CD

Методология CI/CD подразумевает разделение процесса разработки на семь этапов:

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

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

2. Сборка.

Выбранная система контроля версий инициирует автоматическую сборку и последующее тестирование проекта. Для автоматизации сборки может применяться Jenkins или другое средство.

3. Ручное тестирование.

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

4. Релиз.

После ручного тестирования сборка получает исправления, а итоговый номер версии повышается.

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

На данном этапе новая рабочая версия кода отправляется на production-сервера (клиент теперь может увидеть новый функционал).

6. Поддержка и мониторинг.

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

7. Планирование.

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

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

Инструментов, конечно же, куда больше, чем здесь перечислено, но мы рассмотрим наиболее популярные решения:

Jenkins

На сегодняшний день является одним из самых известных инструментов интеграции. Изначально был частью проекта Hudson, созданного Kohsuke Kawaguchi в 2004 году, но в 2011 году Jenkins отделился и сменил название. Поддерживает весь жизненный цикл разработки ПО от сборки и тестирования до документирования и развертывания. Поддерживает множество плагинов, которые помогают в сборке, автоматизации и развертывании любого программного продукта. Проект с открытым исходным кодом.

Ссылка

Gitlab

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

Ссылка

Bitbucket Pipelines

Данный инструмент CI напрямую интегрирован в Bitbucket (облачная система контроля версий Atlassian). Для тех, чей проект уже находится в Bitbucket, это будет простым следующим шагом на пути к CI. Довольно просто настраивается и конфигурируется, дополнительно предлагает непрерывную доставку (CD). Является облачным решением (для тех, кому нужен самостоятельный хостинг Atlassian предлагает Bamboo).

Ссылка

Circle CI

Не менее популярный инструмент CI/CD, предоставляет удобную платформу для автоматизации сборки и тестирования, а также для комплексного процесса развертывания. Интегрируется с GitHub и Bitbucket для создания сборок и поддерживает непрерывную интеграцию в облаке.

Ссылка

Travis CI

Облачный инструмент, способный подключаться к репозиториям в GitHub с наименьшими настройками. Поддерживает множество языков программирования, обеспечивает автоматическое развёртывание при прохождении сборок. Решение бесплатно для open-source проектов.

Ссылка

TeamCity

TeamCity — инструмент непрерывной интеграции, разработанный JetBrains и выпущенный в 2006 году. Обеспечивает сборку, проверку и выполнение автоматизированных тестов на сервере даже до загрузки коммитов с изменениями, что позволяет поддерживать код в чистоте. Интегрируется с различными IDE.

Ссылка

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

Источники: 
https://levelup.gitconnected.com/basics-of-ci-cd-a98340c60b04
https://katalon.com/resources-center/blog/ci-cd-introduction