О методологии CI/CD простыми словами — принципы, этапы, плюсы и минусы

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

Что такое CI/CD

CI/CD (Continuous Integration/Continuous Delivery) — это методология разработки, которая позволяет автоматизировать процесс создания ПО. Подход охватывает все этапы разработки: сборку, тестирование и развертывание программного кода.

Простыми словами, CI/CD — это аббревиатура, в основе которой заложены основные принципы методологии. Их всего четыре:

  1. Непрерывная интеграция (Continuous Integration) — под этим понятием подразумевается частое изменение кода, в том числе размещенного в одном репозитории. Непрерывная интеграция позволяет писать код нескольким разработчикам одновременно: это удобно, когда ведется работа над разными частями кода.
  2. Непрерывное тестирование (Continuous Testing) — автотестирование нового кода сразу после его интеграции в репозиторий. Тесты позволяют проверить работоспособность кода и его соответствие стандартам качества.
  3. Непрерывное развертывание (Continuous Delivery) — после того как программный код протестирован, начинается процедура подготовки кода к релизу. Суть этого процесса состоит в том, что проверенный код автоматически доставляется в тестовую среду, среду разработки или продакшн.
  4. Непрерывная доставка (Continuous Deployment) — этап развертывания кода в производственную среду: это действие необходимо подтвердить вручную.

Этапы разработки по методологии CI/CD

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

  1. Написание кода. Разработчик пишет новый код и проверяет его на работоспособность вручную.
  2. Коммит изменений. На начальном этапе разработчик отправляет обновленную версию кода в общую систему контроля версий (например, Git).
  3. Сборка кода и его автотестирование. Среда разработки автоматически собирает обновленный код и запускает тестирование. Если тесты завершились успешно, можно переходить к следующему шагу.
  4. Ручное тестирование. После автоматической проверки новый код передается тестировщикам для ручной проверки.
  5. Развертывание. Готовый код размещается на серверах компании-разработчика. После этого принимается решение о его выпуске.
  6. Выпуск. После тестирования и исправления ошибок выполняется обновление кода. По окончании обновления продукт готов к использованию: клиенты могут работать с новой программой, изучая ее функционал.
  7. Поддержка. Клиенты продолжают пользоваться продуктом и дают обратную связь по нему. В это время разработчики поддерживают программу и анализируют отзывы.
  8. Планирование и доработка. На основе обратной связи клиентов, планируется новый функционал или переработка текущего. Когда изменения запланированы, разработчики начинают писать новый код — на этом моменте цикл замыкается и начинается заново.
Источник: Shutterstock. CI/CD автоматизирует процесс разработки ПО и охватывает все его этапы

CI/CD: плюсы и минусы подхода

CI/CD — популярная методика разработки ПО с большим количеством преимуществ. Среди них:

  • Сокращение сроков разработки. CI/CD позволяет ускорить цикл создания ПО до нескольких дней (в случае с крупными проектами — до нескольких людей).
  • Отбор вариантов. Подход CI/CD позволяет анализировать код до его выпуска в общий доступ. Благодаря этому можно выбрать наиболее подходящий вариант кода из нескольких, а также вовремя исключить тупиковые ветки кода.
  • Высокое качество тестирования. Подход CI/CD сочетает в себе автоматические и ручные тесты. Благодаря этому снижается риск ошибок в работе продукта.

Что касается недостатков, их всего два:

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

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

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

Ниже мы описали наиболее популярные инструменты для CI/CD.

Git

Git — это распределенная система контроля версий. Она позволяет разработчикам отслеживать изменения в коде программы, а также работать над проектом совместно с коллегами. Git хранит историю изменения данных: это позволяет откатить изменения в любой момент.

Основной функционал Git:

  • отслеживание изменений в файлах,
  • работа с удаленными репозиториями,
  • тегирование,
  • создание новых веток разработки или исправления ошибок,
  • объединение изменений при помощи слияния веток,
  • решение конфликтов слияния веток.

Также существует инструмент Gitlab CI/CD — система, которая полностью интегрирована в Gitlab и используется для автоматизации сборки кода.

Jenkins

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

Основной функционал Jenkins:

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

Travis CI

Travis CI — это облачный сервис непрерывной интеграции с поддержкой многих языков программирования и платформ. Он автоматически собирает и тестирует код при каждом изменении в репозитории.

Основной функционал Travis CI:

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

CircleCI

CircleCI — это сервис непрерывной интеграции и доставки, который автоматизирует все этапы работы с программным кодом. Отчасти он напоминает Jenkins: он также позволяет собирать, тестировать и развертывать код, если в него внесены изменения.

Основной функционал CircleCI:

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

GitHub Actions

GitHub Actions — это сервис, который позволяет настроить CI/CD-процессы напрямую на GitHub. Он помогает автоматизировать сборку, тестирование и развертывание программного кода, а также поддерживает интеграцию с другими системами контроля версий.

Основной функционал GitHub Actions:

  • поддержка популярных языков программирования (Python, PHP и многих других),
  • мониторинг процессов в режиме реального времени,
  • гибкая настройка окружения в зависимости от нужд проекта,
  • поддержка готовых шаблонов и конфигураций.

Kubernetes

Kubernetes — это платформа для оркестрации контейнеров с открытым исходным кодом. Она подходит для создания и поддержки сложных распределенных систем, а также для управления контейнерными приложениями.

Основной функционал Kubernetes:

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

Terraform

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

Основной функционал Terraform:

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

Docker

Docker — это платформа с открытым исходным кодом. Она позволяет создавать, развертывать и запускать приложения в контейнерах — легковесных изолированных средах, в которых есть всё необходимое для работы приложения.

Основной функционал Docker:

  • изоляция приложений друг от друга,
  • возможность переноса контейнеров между средами,
  • простое управление зависимости приложений,
  • гибкое масштабирование,
  • оптимизация ресурсов оборудования.

Подведем итоги

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

Галина Петрова

Кейс Stworka: как создать ERP в облаке для 5000 строительных компаний

А также запустить маркетплейс для строителей и обрабатывать 1,5 млн артикулов ежедневно. Рассказываем, как компания Stworka развернула IT-инфраструктуру в Облаке...
Read More

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

Мир разработки ПО издалека кажется непонятным и запутанным, но существуют инструменты, которые значительно упрощают жизнь и делают работу более эффективной....
Read More

Соглашение об уровне обслуживания (SLA)

Поговорим о документе, который может серьезно повлиять на успех проекта, будь то интернет-магазин, SaaS-платформа или любой другой онлайн-сервис. Речь пойдет...
Read More

Что такое S3 (Simple Storage Service)

Если вы только начинаете свой путь в разработке, вам обязательно нужно познакомиться с S3. Это краеугольный камень многих современных приложений...
Read More

Полный обзор NoSQL: особенности и использование

Развитие интернета диктует новые правила в разработке. Традиционные базы данных, которые называются реляционными (RDBMS), не справляются с задачами, которые требуют...
Read More

Как использовать DataSphere. Датасеты в DataSphere

Данные нужны в любой сфере: магазины анализируют продажи, в медцентры — истории болезней, ученые — результаты экспериментов. Чем больше информации,...
Read More

Основные задачи машинного обучения: классификация, регрессия, кластеризация и уменьшение размерности

Machine Learning ― это уже часть нашей повседневной жизни. От рекомендаций фильмов на Кинопоиске до спам-фильтров в почте — за...
Read More

Обзор CLI: командная строка и ее возможности

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

Шардирование в базах данных: обзор концепции

В условиях стремительного роста объемов данных и увеличения нагрузок на информационные системы эффективность их масштабирования становится критически важной. Одним из...
Read More

Графический процессор (GPU): что это, для кого, разновидности

Дизайнерам, проектировщикам и разработчикам требуются мощные вычислительные ресурсы для работы. Обычный процессор (CPU) не справится с такими задачами, как обработка...
Read More