CI, CD and CD
Continuous Integration / Continuous Delivery and Continuous Deployment
План
- Непрерывная интеграция (CI)
- Непрерывная доставка (CD)
- Непрерывное развёртывание (CD)
- Непрерывное тестирование
- CI/CD pipeline
- Инструменты CI/CD
- Глоссарий
- Литература
Непрерывная интеграция (Continuous Integration, CI) и непрерывная поставка (Continuous Delivery, CD) представляют собой набор принципов и практик, которые позволяют разработчикам чаще и надежнее развертывать изменения программного обеспечения.
Непрерывная интеграция - Continuous Integration (CI)
Непрерывная интеграция — это методология разработки, при которой в код вносятся небольшие изменения с частыми коммитами. Поскольку большинство современных приложений разрабатываются с использованием различных платформ и инструментов, то появляется необходимость в механизме интеграции и тестировании вносимых изменений.
Цель CI — обеспечить последовательный и автоматизированный способ сборки, упаковки и тестирования приложений. При налаженном процессе непрерывной интеграции разработчики с большей вероятностью будут делать частые коммиты, что, в свою очередь, будет способствовать улучшению коммуникации и повышению качества программного обеспечения.
Непрерывная интеграция (CI) — первичный, базовый процесс обновления ПО, в рамках которого все изменения на уровне кода вносятся в единый центральный репозиторий. Такое внесение принято называть слиянием (merge). После каждого слияния в изменяемой системе происходит автоматическая сборка и тестирование.
Автоматизация процессов CI позволяет ускорить процесс разработки, устраняя рутинные операции по ручной проверке интеграции с остальным кодом и сокращая нагрузку на отдел тестирования благодаря более раннему нахождению проблем интеграции с остальными частями приложения. Таким образом разработчики страхуются от слишком поздних обнаружений проблем в обновлениях. Кроме того, у разработчика не выйдет сэкономить себе время, отправив изменения на тестирование без какой-либо проверки.
Непрерывная интеграция. Каждый этап запускается и выполняется автоматически
Непрерывная доставка - 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) и непрерывного развертывания. Вместе они организованы в конвейер для создания высококачественного программного обеспечения и разработки приложений.
Инструменты 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
Глоссарий
- Stage или staging-окружение (инсценирование) — это среда для тестирования, которая в точности похожа на продакшен-окружение. Она стремится как можно точнее отразить реальное продакшен-окружение и может подключаться к другим продакшен-сервисам и данным, таким как базы данных.
Подрбнее Deployment environment
Литература
I. Теория
- 📖 Continuous integration vs. continuous delivery vs. continuous deployment
- 📖 Непрерывная интеграция, непрерывная доставка, непрерывное развертывание: просто матрешка
- 📖 Что такое CI (Continuous Integration)
- 📖 CI, CD и снова CD: принцип работы и отличия
- 🎥 Философия CI, CD и CD
- 🎥 Структура CI/CD Pipeline
- 📖 CI/CD Pipeline: A Gentle Introduction
II. Курсы