Что такое 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 млн пользователей.