CI, CD and CD

Continuous Integration / Continuous Delivery and Continuous Deployment

enter image description here

План

  1. Непрерывная интеграция (CI)
  2. Непрерывная доставка (CD)
  3. Непрерывное развёртывание (CD)
  4. Непрерывное тестирование
  5. CI/CD pipeline
  6. Инструменты CI/CD
  7. Глоссарий
  8. Литература

Непрерывная интеграция (Continuous Integration, CI) и непрерывная поставка (Continuous Delivery, CD) представляют собой набор принципов и практик, которые позволяют разработчикам чаще и надежнее развертывать изменения программного обеспечения.

enter image description here

Непрерывная интеграция - Continuous Integration (CI)

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

Цель CIобеспечить последовательный и автоматизированный способ сборки, упаковки и тестирования приложений. При налаженном процессе непрерывной интеграции разработчики с большей вероятностью будут делать частые коммиты, что, в свою очередь, будет способствовать улучшению коммуникации и повышению качества программного обеспечения.

Непрерывная интеграция (CI) — первичный, базовый процесс обновления ПО, в рамках которого все изменения на уровне кода вносятся в единый центральный репозиторий. Такое внесение принято называть слиянием (merge). После каждого слияния в изменяемой системе происходит автоматическая сборка и тестирование.

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

enter image description here
Непрерывная интеграция. Каждый этап запускается и выполняется автоматически

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

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

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

Непрерывная доставка (CD) — CI + CD. Следующий после CI уровень. Теперь новая версия не только создаётся и тестируется при каждом изменении кода, регистрируемом в репозитории, но и может быть оперативно запущена по одному нажатию кнопки развёртывания. Однако запуск развёртывания всё ещё происходит вручную — ту самую кнопку всё же надо кому-то нажать. Этот метод позволяет выпускать изменения небольшими партиями, которые легко изменить или устранить в случае необходимости.

Непрерывная доставка с ручным запуском
Непрерывная доставка. Развёртывание выполняется автоматически, но запускается вручную

Непрерывное развёртывание - Continuous Deployment (CD)

Непрерывное развёртывание (CD) — CI +CD + CD. После автоматизации релиза остаётся один ручной этап: одобрение и запуск развёртывания в продакшен (злосчастная кнопка). Практика непрерывного развёртывания упраздняет и это, не требуя непосредственного утверждения со стороны разработчика. Все изменения развёртываются автоматически.

Непрерывное развёртывание
Непрерывное развёртывание. Все этапы запускаются и выполняются автоматически

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

Непрерывное тестирование - Continuous Testing

Непрерывное тестирование – методология тестирования программного обеспечения, который включает в себя процесс раннего тестирования, частого тестирования, повсеместного тестирования и автоматизации.

Непрерывное тестирование связывает все этапы CI\CD\CD как допуск к следующему этапу конвеера. Это стратегия оценки качества на каждом шагу.

Цель непрерывного тестирования – тестировать рано и тестировать часто. В процессе участвуют системы разработки, DevOps, QA и операционная система.

CI/CD pipeline

CI/CD pipeline (Конвейер непрерывной интеграции / непрерывной доставки) - это гибкий рабочий процесс DevOps, ориентированный на частую и надежную доставку программного обеспечения. Это структура, которая включает методы непрерывной интеграции (CI), непрерывного тестирования, непрерывной доставки (CD) и непрерывного развертывания. Вместе они организованы в конвейер для создания высококачественного программного обеспечения и разработки приложений.
enter image description here

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

Есть множество SaaS-решений, для обзора которых потребовалась бы отдельная статья. Остановимся на основных решениях, которые легко интегрируются в подавляющем большинстве случаев:

GitLab

Описание. Gitlab — это новый инструмент CI с поддержкой всех возможностей DevOps. Продукт создавался для повышения удобства работы с Github. Gitlab имеет современный интерфейс с поддержкой контейнеров. Использует YAML для описания CI/CD процессов.

Функциональные возможности:

  • Размещение в локальной или облачной среде
  • Непрерывное тестирование безопасности
  • Легкий в освоении интерфейс

Веб-сайт: https://about.gitlab.com

GitHub Actions

Описание. Хороший, но относительно новый вариант для тех, кто использует GitHub. Также использует YAML для описания CI/CD процессов.

Функциональные возможности:

  • Размещение облачной среде
  • Встроен в GitHub
  • Легкий в освоении интерфейс

Веб-сайт: https://github.com/features/actions

Jenkins

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

Функциональные возможности:

  • Локальная среда
  • Проекты с открытым исходным кодом
  • Надежная экосистема аддонов/плагинов

Веб-сайт: https://jenkins.io/

AWS CodePipeline

Описание. Amazon Web Services — один из доминирующих поставщиков облачной инфраструктуры на рынке. Он предлагает инструменты и услуги для различных задач, связанных с инфраструктурой и разработкой кода. В качестве инструмента CI предлагается CodePipeline. CodePipeline может напрямую взаимодействовать с другими существующими инструментами AWS, создавая комплексную среду AWS.

Функциональные возможности:

  • Полностью облачная среда
  • Интеграция с Amazon Web Services
  • Поддержка пользовательских плагинов
  • Надежный контроль доступа

Веб-сайт: https://aws.amazon.com/codepipeline/

CircleCI

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

Функциональные возможности:

  • Триггеры уведомлений о событиях CI
  • Оптимальная производительность для быстрых сборок
  • Удобная отладка через протокол SSH и локальные сборки
  • Аналитика для измерения производительности сборки

Веб-сайт: https://circleci.com/

Azure Pipelines

Описание. Azure — это платформа облачной инфраструктуры Microsoft, аналог Amazon Web Services. Как и упомянутый выше сервис AWS CodePipeline, Azure предлагает инструмент CI, полностью интегрированный в набор инструментов хостинга Azure.

Функциональные возможности:

  • Интеграция с платформой Azure
  • Поддержка платформы Windows
  • Поддержка контейнеров
  • Интеграция с Github

Веб-сайт: https://azure.microsoft.com

Atlassian Bamboo

Описание. Еще одно предложение CI от Atlassian. Если Bitbucket Pipelines — исключительно облачный вариант, то Bamboo предлагает альтернативу с самостоятельным хостингом.

Функциональные возможности:

  • Лучшая интеграция с комплектом решений Atlassian
  • Большой выбор аддонов и плагинов
  • Поддержка контейнеров с агентами Docker
  • API триггеров для функциональных возможностей IFTTT («если это, тогда то»)

Веб-сайт: https://www.atlassian.com/software/bamboo

Глоссарий

  1. Stage или staging-окружение (инсценирование) — это среда для тестирования, которая в точности похожа на продакшен-окружение. Она стремится как можно точнее отразить реальное продакшен-окружение и может подключаться к другим продакшен-сервисам и данным, таким как базы данных.
    Подрбнее Deployment environment

Литература

I. Теория

  1. 📖 Continuous integration vs. continuous delivery vs. continuous deployment
  2. 📖 Непрерывная интеграция, непрерывная доставка, непрерывное развертывание: просто матрешка
  3. 📖 Что такое CI (Continuous Integration)
  4. 📖 CI, CD и снова CD: принцип работы и отличия
  5. 🎥 Философия CI, CD и CD
  6. 🎥 Структура CI/CD Pipeline
  7. 📖 CI/CD Pipeline: A Gentle Introduction

II. Курсы

  1. 🎥 Gitlab CI: Pipelines, CI/CD and DevOps for Beginners