Найти в Дзене
Timeweb Cloud

CI/CD-пайплайн: что это такое, как применяется в разработке

Оглавление

В статье будет рассмотрена методология DevOps с акцентом на ее основном элементе — CI/CD-пайплайнах.

📜 Читайте также: Развертывание приложения Node.js с помощью Docker: инструкция

Введение

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

Подробнее про CI/CD-пайплайны

В современном мире многие компании стремятся создавать приложения для пользователей, которые являются основным их продуктом или услугой (например, приложения для вызова такси, заказа еды или сдачи жилья). Одним из конкурентных преимуществ таких сервисов является скорость выпуска обновлений и улучшений приложения.

Для ускорения доставки таких приложений важно уделить внимание двум ключевым аспектам:

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

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

Какие инструменты включает в себя пайплайн CI/CD

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

На платформах хостинга git-репозиториев, таких как Github, GitLab и Bitbucket, предоставляются готовые системы для настройки CI/CD. Также существуют другие инструменты, такие как Jenkins, AWS и Azure DevOps. Выбор инструмента зависит от предпочтений разработчика и от того, что лучше подходит для конкретного проекта. Ниже приведены некоторые инструменты, которые используются исключительно для настройки CI/CD-пайплайнов:

Jenkins — это программное обеспечение, разработанное на платформе Java и предназначенное для всех этапов разработки от тестирования до автоматизации и развертывания ПО. Благодаря тысячам плагинов, которые поддерживает Jenkins, пользователи имеют возможность настроить сервер автоматизации под свои потребности. И, кстати, это ПО абсолютно бесплатно.

CircleCI — это веб-сервис для автоматизации процессов CI/CD. Он интегрируется с репозиториями на GitHub, GitHub Enterprise и Bitbucket, что позволяет автоматически запускать сборки при изменении кода. Сервис может использовать контейнеры или виртуальные машины для запуска сборок, что позволяет распараллеливать выполнение пайплайнов на несколько потоков. В сервисе есть как платные, так и бесплатные функции, включая возможность выполнения одного задания с бесплатными контейнерами для проектов с открытым исходным кодом.

TeamCity — это сервер для управления процессом сборки и непрерывной интеграции, который был разработан компанией JetBrains. Он предназначен для использования DevOps-командами и поддерживает интеграцию с IDE и Visual Studio. TeamCity написан на Java, и кроме того, может поддерживать .NET-проекты и может быть установлен на серверы под управлением операционных систем Windows и Linux.

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

Основные этапы пайплайна CI/CD в четкой последовательности

7 главных этапов:

1. Для автоматического запуска пайплайна после отправки нового кода в репозиторий необходимо использовать триггер. Существует несколько способов реализации этой функции, таких как опрос репозитория Git с помощью инструмента CI/CD (например Jenkins) или использование «hook» (например Git Webhooks), который будет отправлять push-уведомление инструменту CI/CD при каждом push в системе контроля версий.

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

2. На этой стадии CI/CD-инструмент получает код из репозитория и определяет, какой именно коммит вызвал запуск пайплайна, а также какие шаги должны быть выполнены в рамках этого пайплайна.

3. На этом этапе инструмент CI/CD использует инструменты сборки. Например, Maven или Gradle, чтобы скомпилировать исходный код приложения. Для обеспечения чистоты среды сборки часто используется контейнеризация с помощью Docker или подобных инструментов. Контейнеры позволяют создавать изолированные среды, которые содержат все необходимые зависимости для успешной компиляции и запуска приложения.

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

5. Если все модульные тесты прошли успешно, то следующим этапом является упаковка приложения для доставки пользователю. Для этого может быть использовано создание JAR-файла, если приложение написано на Java. Если приложение размещено в контейнере Docker, то следует создать Docker-образ.

6. На предпоследнем шаге проводится проверка соответствия программного обеспечения требованиям заказчика или разработчика. Автоматизация тестов позволяет существенно сократить время, затрачиваемое на ручное тестирование. Например, при помощи Selenium можно проверить, может ли пользователь на сайте интернет-магазина добавить продукт в корзину. Вместо ручного нажатия кнопки это делает специальная программа.

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

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

CI/CD в работе

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

Есть два способа, которые помогут это исправить:

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

Предположим, что у вас есть проект в GitLab, и вы хотите автоматизировать процесс сборки и деплоя с помощью службы GitLab Runner. Runner — это виртуальная машина, которая выполняет задания пайплайна. Вы можете программировать Runner, используя YAML-скрипты, где определяются задания, которые будут выполняться Runner-ом, а также ветки принятия решений при возникновении определенных условий. Пример простого YAML-скрипта можно увидеть ниже:

build-job:
stage: build  
script:
- echo "Hello, $GITLAB_USER_LOGIN!"

test-job1:  
stage: test  
script:
- echo "This job tests something"

test-job2:
stage: test  
script:
- echo "This job tests something, but takes more time than test-job1."    
- echo "After the echo commands complete, it runs the sleep command for 20 seconds"    
- echo "which simulates a test that runs 20 seconds longer than test-job1"    
- sleep 20

deploy-prod:
stage: deploy  
script:
- echo "This job deploys something from the $CI_COMMIT_BRANCH branch."  
environment: production

Пример YAML-скрипта пайплайна в GitLab показывает, как описать задания для раннера. В этом файле можно определить порядок и структуру заданий, которые должен выполнить раннер. Всего в пайплайне есть 4 задания, включая сборку, 2 задания для тестирования и задание для деплоя.

-2

Изображение взято с официального сайта GitLab

Каждое задание описывается в отдельном блоке, где указывается его название, команды, которые нужно выполнить, и условия, при которых задание будет запущено. В данном примере используются предопределенные переменные, которые позволяют выводить информацию в консоль.

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

Также важно не пренебрегать использованием специальной документации и руководствами. В них описывается множество реальных примеров и говорится об особенностях использования каждого инструмента. Мы оставили ссылки на руководства у GitLab и у GitHub.

В завершении

DevOps-методология и CI/CD-пайплайны позволяют ускорить процесс разработки и снизить количество ошибок.

Чтобы ваш опыт работы с пайплайнами был положительным, советуем следовать этим советам:

  • Для успешной реализации DevOps-методологии важно не только версионировать кодовую базу продукта, но и скрипты сценариев CI/CD пайплайна.
  • Не стоит нарушать порядок выполнения этапов пайплайна, важно придерживаться последовательности и не пропускать ни одного этапа.
  • Все процессы должны быть автоматизированы для соблюдения DevOps-методологии.
  • Для того чтобы всегда быть в курсе происходящего процесса, необходимо настроить уведомления, которые будут регулярно информировать вас о текущем состоянии CI/CD пайплайна. Например, такие уведомления могут приходить в мессенджер. Если возникнут проблемы, нужно их устранять, а не пропускать этапы пайплайна. Таким образом, соблюдая эти простые советы, вы сможете эффективно внедрять DevOps-подходы в свои процессы разработки.
Кстати, в официальном канале Timeweb Cloud собрали комьюнити из специалистов, которые говорят про IT-тренды, делятся полезными инструкциями и даже приглашают к себе работать.💥