Что такое CI/CD и как эта практика связана с DevOps

Что такое CI/CD
CI/CD — это практика, которая сегодня сменяет архаические подходы к разработке программного обеспечения. Она названа по первым буквам фразы «Continuous Integration/Continuous Delivery», что переводится, как непрерывная интеграция и непрерывное развертывание. Иногда CD означает еще и Continuous Delivery, непрерывная доставка (кода).

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

Что такое Continuous Integration (CI) непрерывная интеграция

Интеграция — это процесс объединения части кода, написанной программистом, с остальными частями ПО. В CI/CD интеграция автоматизированна и поэтому происходит без прерывания остальных процессов разработки ПО, почему и называется «непрерывная интеграция» — это бесшовный процесс. Цель CI — автоматически интегрировать изменения в общий код и проверить его работоспособность после этого.

Что такое Continuous Delivery (CD) непрерывная доставка

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

Что такое Continuous Deployment (CD) непрерывное развертывание

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

В чем отличие от DevOps. Роль CI/CD в DevOps

CI/CD — это DevOps-практика. DevOps (акроним от англ. development & operations, разработка и операции) представляет собой более широкий подход к организации всех процессов в IT-компании, в которых задействованы и команды разработки, и финансисты, и менеджеры. CI/CD — основной элемент этого подхода; методология, которая относится непосредственно к процессам разработки ИТ-продукта.

DevOps и CI/CD являются Agile-практиками, они оптимизируют работу компании-разработчика: DevOps как общая философия быстрой и качественной разработки, а CI/CD как метод создания и вывода продукта на рынок, у которого есть четкие цели, принципы и этапы. Можно сказать, что DevOps без CI/CD с его частыми выпусками обновлений с помощью автоматического пайплайна невозможен.

Цели и принципы CI/CD

Цель CI/CD-практики проста: ускорить выпуск программного продукта, повысив его качество и снизив риски. Чтобы достичь этих целей, в CI/CD придерживаются четырех принципов:
  • Разделение ответственности между всеми заинтересованными сторонами.
    Этими интересантами являются как различные специалисты по разработке программного продукта, так и пользователи. Стадии жизненного цикла проекта разделяются между ними в зависимости от компетенций участников. Команда может быть разной, но в среднем разделение следующее: программисты и дизайнеры отвечают за бизнес-логику и опыт пользовательского взаимодействия с системой; инженеры по качеству занимаются тестированием и вводом сквозных функций; DevOps-инженеры берут на себя работу по доставке кода; пользователи (или заказчики) дают обратную связь о работе продукта, к которой относится следующий принцип.
  • Быстрая обратная связь.
    Медленное внесение изменений в ПО может вести к финансовым и репутационным рискам его владельцев, а порой и к более серьезным последствиям (например, если это медицинское приложение). Возможность быстрого добавления и тестирования нового функционала, внесения правок в проект обеспечивает короткий цикл обратной связи с пользователями программного продукта. Сокращению этого цикла способствует автоматизация процессов сборки и тестирования, а также минимизирование посредников в передаче информации.
  • Снижение рисков.
    Участники проекта, ответственные за свой этап его жизненного цикла, должны стремиться к тому, чтобы минимизировать возможность ошибок. Для этого они используют инструменты, позволяющие контролировать, оптимизировать и мониторить соответствующие процессы разработки и поддержки ПО.
  • Общая среда.
    Реализация единого окружения, в котором работает команда разработки, позволяет эффективно и прозрачно построить процессы CI/CD: версионность кода, контроль качества, тестирование, масштабирование, сборка и другие действия при разработке продукта.
Этапы CI/CD
Непрерывная разработка программного обеспечения проходит семь этапов, которые зацикливаются по достижении последнего. Один семиэтапный цикл называется итерацией. Эти итерации происходят бесшовно, а иногда и параллельно, в чем и заключается непрерывность процессов создания ПО.
  • Этап 1: планирование.
    На этом этапе формируются запросы на функциональность продукта и разрабатывается план работ. Формирование запросов происходит либо на основании технического задания (ТЗ) от заказчика, либо на основании обратной связи от пользователей уже готового продукта, и тогда это запрос на новую функциональность, на доработки.
  • Этап 2: кодинг.
    Это этап программирования ПО, написания его кода. Каждый программист пишет свою часть кода, относящуюся к определенному модулю проекта. После ручного тестирования своей части кода кодеры добавляют ее к общей ветке текущей версии проекта. Когда все закончат внесение своих модулей, разработка переходит на следующую стадию.
  • Этап 3: сборка.
    Этап автоматической сборки всех частей кода в общий код. Здесь же происходит общая авто-проверка проекта на работоспособность. Если обнаружены ошибки, проект возвращается на предыдущую ступень для их исправления.
  • Этап 4: тестирование.
    Автоматически протестированная версия отправляется на более пристальное, ручное тестирование, которое позволяет обнаружить нюансы, из-за которых проект может работать неправильно или недостаточно эффективно. После этого этапа каждая новая сборка кода получает номер кандидата на релиз.
  • Этап 5: релиз.
    Здесь появляется версия рабочая версия кода и осуществляется переход на следующий этап.
  • Этап 6: развертывание.
    Происходит автопубликация кода на production-сервере. Версия становится клиентской, потому что пользователи могут взаимодействовать с программным продуктом.
  • Этап 7: поддержка и мониторинг.
    Разработчики осуществляют поддержку программного решения, получает обратную связь от конечных пользователей и производит анализ пользовательского опыта. На его основании происходит понимание того, что надо исправить или дополнить и осуществляется переход на первый этап. Начинается следующая итерация CI/CD-разработки.

Преимущества CI/CD

Подход позволяет оперативно выводить на рынок программные продукты и оперативно вносить в них изменения и новые функции по запросам заказчиков. По сравнению с классическими моделями разработки этот метод сокращает Time To Market с нескольких месяце до нескольких дней. Ранний вывод на рынок способствует конкурентным преимуществам.

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

Недостатки CI/CD

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

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

В CI/CD для автоматизации тестирования, развертывания и других процессов разработки принято использовать узко-специальные инструменты, которые покрывают полный жизненный цикл разработки SDLC (Software Development Life Cycle). Их количество постоянно возрастает, появляются новые. Мы же расскажем о наиболее популярных и хорошо зарекомендовавших себя инструментах CI/CD, которые успешно применяют и наши инженеры, грамотно подбирая под каждый проект.

GitLab

DevOps‑платформа для управления репозиториями (хранилищами) проекта. Позволяет вести историю тестирования и изменений, мониторинг ошибок. Для описания CI/CD-процессов используется YAML.

GitHub Actions

CI/CD-платформа для тех, кто использует GitHub — веб-сервис для совместной разработки и хостинга IT-проектов. Тоже использует YAML.

Docker

Система непрерывной доставки и развертывания (CD), позволяющая контейнеризировать проект. Для управления (оркестрации) кластерами микросервисного проекта можно использовать Kubernetes.

Travis-CI

Cloud-сервис непрерывной интеграции. Легко интегрируемый с GitHub при минимуме настроек, не требует установки.

Jenkins

Один из самых востребованных DevOps- и CI/CD-инструмент, работающий с огромным количеством плагинов, что обеспечивает гибкость процессов разработки и адаптации под задачи проектов. Для описания CI/СD-процессов использует Groovy, имеет собственный DSL в Jenkinsfile.

PHP Censor

CI-сервер для автоматизации сборки проектов, написанных на PHP. Работает с библиотеками для тестирования PHP Spec, Atoum и Behat, а также с разными репозиториями, включая GitLab. Требует хостинг и настройку.

Cycle Analytics

Review Apps

Buddy

Популярный из-за простоты и надежности инструмент для полноценной разработки с использованием кода с GitHub, GitLab и Bitbucket.

Bamboo CI

Инструмент для одновременной сборки, тестирования и развертывания нескольких проектов с анализом ошибок. Поддерживает импорт из Jenkins и совместим с Selenium, JUnit и PHPUnit.

Circle CI

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

CodeShip

Среда для развертывания кода из GitHub и Bitbucket напрямую. Совместима с разными языками и технологиями.

TeamCity

Работает с агентами сборки (в бесплатной версии их количество ограничено тремя). Если подписаться — будет техподдержка.

Rex

Автоматизирует CI-процессы в дата-центрах. Работает на Perl-скриптах.

Open Build Service (OBS)

Автоматизирует CI/CD-процессы при разработке дистрибутивов приложений.

Buildbot

Автоматизирует тестирование и сборку, которую к тому же гибко настраивает через помощью Python-компоненты. Поддерживает различные VCS.


CI/CD в GitinSky

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