Что такое CI/CD: принципы, инструменты и преимущества для бизнеса
При разработке программного обеспечения скорость и качество выпускаемого продукта играют важную роль. Современные подходы и процессы нацелены на ускоренную доставку новых функций конечным пользователям. При этом стабильность и надёжность приложений и сервисов не ухудшаются. Одним из таких процессов является CI/CD, который включает в себя набор практик и инструментов, позволяющих автоматизировать процессы сборки, тестирования и развёртывания кода. Сегодня мы рассмотрим, что представляет собой CI/CD, его этапы, а также изучим процесс его внедрения.
Определение CI/CD
CI/CD (от англ. Continuous Integration — непрерывная интеграция и Continuous Delivery — непрерывная доставка) — это методология разработки ПО, в основу которой заложено использование автоматизации для непрерывного тестирования, непрерывной интеграции, непрерывной доставки и непрерывного развертывания программного обеспечения. Процессы CI/CD не только ускоряют саму разработку, но также повышают качество продукта при его доставке и помогают поддерживать высокое качество программного обеспечения на всех этапах его разработки и эксплуатации.
Описание процессов Continuous Delivery и Continuous Deployment
Термин CI/CD состоит из двух взаимосвязанных процессов — Continuous Integration и Continuous Delivery. Рассмотрим эти процессы подробнее.
CI (Continuous Integration): представляет собой автоматизированный процесс подготовки кода к развертыванию. Во время разработки программисты регулярно вносят изменения (коммиты) в общий репозиторий (например, в GitHub или GitLab), после чего запускаются автоматические тесты и начинается сборка продукта. CI позволяет выявлять ошибки на ранних этапах разработки.
CD (Continuous Delivery): автоматизирует подготовку кода к развертыванию. После успешного тестирования кода он автоматически подготавливается для развертывания в продуктивной среде.
Чем отличается Continuous Delivery от Continuous Deployment?
Термин CD охватывает сразу два понятия — Continuous Delivery и Continuous Deployment. Хотя процессы Continuous Delivery и Continuous Deployment имеют много общего, между ними есть существенное различие, которое заключается в наличии или отсутствии ручного подтверждения перед выпуском релиза. Continuous Delivery требует ручного подтверждения, тогда как Continuous Deployment автоматически развертывает код без ручного подтверждения после успешного прохождения всех тестов.
Этапы CI/CD
Архитектура методологии CI/CD построена на семи различных этапах. Каждый из них является важным звеном в цепочке процесса. Разберём каждый этап более подробно.
Планирование
Создание любого продукта начинается с его планирования. Определяются требования к будущему сервису, его архитектуре и функционалу. На данном этапе активно используются методики управления проектами, такие как Agile, Scrum, Kanban.
Написание кода
Программисты пишут код приложения, исправляют ошибки. Тестирование работоспособности происходит локально. После этого все внесённые изменения коммитятся и отправляются в удалённый репозиторий проекта. Как правило, для каждой разрабатываемой функции используется отдельная ветка. Далее происходит процесс объединения (merge request) всех ранее внесённых изменений в главную ветку (обычно называемую main или master), в которой хранится версия готового работоспособного приложения.
Автоматическая сборка
На этапе автоматической сборки происходит сборка всех частей кода в единое целое. Сборка включает компиляцию кода, создание артефактов (при необходимости) и подготовку к развёртыванию. Поскольку сборка проекта осуществляется полностью в автоматическом режиме, это исключает человеческие ошибки и ускоряет процесс.
Тестирование
После того как проект собран, начинается процесс тестирования. После автоматических тестов готовая сборка отправляется на ручное тестирование для тщательной проверки на наличие функциональных и критических ошибок. На данном этапе важно обнаружить все ошибки, которые могут привести к потенциальным проблемам, чтобы релиз не пришлось отзывать.
Релиз
После того как приложение полностью протестировано, при необходимости вносятся исправления, и готовится финальный релиз, который будет использоваться в production-среде.
Автоматическое развертывание
Релизная версия приложения отправляется на серверы или другие окружения (кластеры Kubernetes, облачные решения) и автоматически разворачивается в необходимой среде (dev, stage, production).
Поддержка и мониторинг
Когда продукт опубликован для конечных пользователей, начинается процесс отслеживания его работоспособности. Активно используются системы для сбора метрик с последующим построением визуализаций, например, с помощью инструментов Prometheus и Grafana. Также процесс поддержки включает обработку инцидентов от пользователей.
Преимущества и недостатки CI/CD
Как и любая другая технология, методология CI/CD обладает своими достоинствами и недостатками, которые необходимо учитывать, прежде чем начать использовать её в своих проектах.
Преимущества CI/CD
Среди преимуществ можно выделить:
Ускорение процесса разработки и выпуска продукта: благодаря использованию автоматизации происходит сокращение времени, необходимого для публикации готового продукта.
Повышение качества разрабатываемых приложений: использование автоматических тестов приводит к снижению количества ошибок, что благоприятно сказывается на качестве.
Снижение рисков: при использовании практик CI/CD можно легко откатывать внесённые изменения. Это снижает риски при возникновении критических проблем.
Гибкость и масштабируемость: возможность создавать несколько окружений (dev, staging, production). Богатый выбор инструментов, которые можно интегрировать в процессы CI/CD.
Улучшение командной работы: использование автоматизации позволяет разработчикам сосредоточиться на написании кода и исправлении ошибок, не тратя время на процесс настройки инфраструктуры и организацию процессов публикации разрабатываемых сервисов.
Интеграция инструментов безопасности: возможность интегрировать различные инструменты безопасности: SAST, DAST, SCA, сканеры образов и т.д.
Недостатки CI/CD
Несмотря на то что методология CI/CD обладает множеством преимуществ, у неё есть недостатки, которые могут осложнить внедрение и использование. К недостаткам можно отнести:
Сложность настройки: внедрение, настройка и поддержка CI/CD — сложный процесс, который требует глубоких знаний и опыта.
Зависимость от инструментов: использование конкретных инструментов может привести к зависимости от них, что в будущем может создать трудности, когда потребуется заменить инструменты или процессы.
Высокие затраты на первоначальных этапах внедрения: когда команда решает перейти к использованию методологии CI/CD, ей необходимо время на внедрение, выбор соответствующих инструментов, а также обучение команды.
Как настроить CI/CD на проекте
Настройка CI/CD зависит от стека технологий, инструментов, инфраструктуры и требований к выпускаемым сервисам. Процесс внедрения CI/CD на проекте состоит из нескольких основных этапов, перечисленных ниже:
Выбор инструмента CI/CD: первый шаг заключается в выборе платформы. На рынке представлены различные CI/CD-инструменты, каждый из которых обладает своим функционалом. Среди таких инструментов можно выделить: GitLab, GitHub Actions, Jenkins, CircleCI, Travis CI.
Интеграция с системой контроля версий: выбранный CI/CD-инструмент необходимо интегрировать с системой контроля версий, например, Git. Некоторые сервисы, такие как GitLab и GitHub, могут хранить код и работать с CI/CD в рамках своей экосистемы без необходимости подключения внешних систем контроля версий.
Настройка CI/CD процессов и определение этапов пайплайна: происходит настройка этапов CI и CD. Также определяются, какие этапы будут включены в пайплайн: сборка, тестирование, развертывание, мониторинг. Настраивается автоматизация для каждого этапа.
Тестирование и отладка: после настройки процессов начинается этап тестирования и поиска ошибок. Необходимо убедиться, что этап CI выполняется корректно: на нём происходит сборка кода и запуск тестов. На этапе CD собранный и проверенный код должен быть развёрнут в заранее заданном окружении и необходимой среде.