О методологии CI/CD простыми словами — принципы, этапы, плюсы и минусы
Подход CI/CD в последнее время много обсуждается в IT. Он часто используется для создания приложений или разработки облачных решений. Но как строится работа по этой методологии и насколько сложно ее внедрить на практике? Об этом мы расскажем в статье.
Что такое CI/CD
CI/CD (Continuous Integration/Continuous Delivery) — это методология разработки, которая позволяет автоматизировать процесс создания ПО. Подход охватывает все этапы разработки: сборку, тестирование и развертывание программного кода.
Простыми словами, CI/CD — это аббревиатура, в основе которой заложены основные принципы методологии. Их всего четыре:
- Непрерывная интеграция (Continuous Integration) — под этим понятием подразумевается частое изменение кода, в том числе размещенного в одном репозитории. Непрерывная интеграция позволяет писать код нескольким разработчикам одновременно: это удобно, когда ведется работа над разными частями кода.
- Непрерывное тестирование (Continuous Testing) — автотестирование нового кода сразу после его интеграции в репозиторий. Тесты позволяют проверить работоспособность кода и его соответствие стандартам качества.
- Непрерывное развертывание (Continuous Delivery) — после того как программный код протестирован, начинается процедура подготовки кода к релизу. Суть этого процесса состоит в том, что проверенный код автоматически доставляется в тестовую среду, среду разработки или продакшн.
- Непрерывная доставка (Continuous Deployment) — этап развертывания кода в производственную среду: это действие необходимо подтвердить вручную.
Этапы разработки по методологии CI/CD
Создание ПО при использовании технологии CI/CD происходит в несколько этапов. Обычно полный цикл разработки программ по принципу CI/CD имеет следующий вид:
- Написание кода. Разработчик пишет новый код и проверяет его на работоспособность вручную.
- Коммит изменений. На начальном этапе разработчик отправляет обновленную версию кода в общую систему контроля версий (например, Git).
- Сборка кода и его автотестирование. Среда разработки автоматически собирает обновленный код и запускает тестирование. Если тесты завершились успешно, можно переходить к следующему шагу.
- Ручное тестирование. После автоматической проверки новый код передается тестировщикам для ручной проверки.
- Развертывание. Готовый код размещается на серверах компании-разработчика. После этого принимается решение о его выпуске.
- Выпуск. После тестирования и исправления ошибок выполняется обновление кода. По окончании обновления продукт готов к использованию: клиенты могут работать с новой программой, изучая ее функционал.
- Поддержка. Клиенты продолжают пользоваться продуктом и дают обратную связь по нему. В это время разработчики поддерживают программу и анализируют отзывы.
- Планирование и доработка. На основе обратной связи клиентов, планируется новый функционал или переработка текущего. Когда изменения запланированы, разработчики начинают писать новый код — на этом моменте цикл замыкается и начинается заново.
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-индустрии. Однако для работы с ней важно соблюсти ряд правил: знать приоритеты компании, неотступно следовать этапам разработки, четко отладить коммуникацию между работниками и иметь все необходимые инструменты для полноценной разработки. Эти шаги упростят внедрение новой методики.
Галина Петрова