Блог АйТиДжен
2024-02-13 14:43

Что такое 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 собранный и проверенный код должен быть развёрнут в заранее заданном окружении и необходимой среде.