Инструменты непрерывной интеграции

Max Rehkopf Max Rehkopf

Описание: непрерывная интеграция (CI) — это рекомендация Agile и DevOps, которая позволяет нескольким разработчикам вносить вклад и совместно работать над общей базой кода с высокой скоростью. Без непрерывной интеграции сотрудничество разработчиков превращается в утомительный ручной процесс координации обновлений и слияний кода.

Основные принципы непрерывной интеграции

CI основывается на рекомендациях по разработке ПО с учетом принципов Agile и DevOps, таких как автоматизированное тестирование, контроль версий, автоматизация сборки и автоматическое развертывание. Каждый из этих компонентов непрерывной интеграции имеет собственную экосистему инструментов и принципов. У поставщиков инструментов для разработки ПО появились комплексные предложения «CI как услуга», объединяющие эти компоненты в один пакет. Чтобы лучше разобраться в пакетных предложениях, повторим основы.

Управление версиями исходного кода

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

Автоматизированное тестирование

Большинство серьезных проектов по разработке ПО включают в себя дополнительную базу кода, не связанную напрямую с бизнес-продуктом и его функциями. Эта вспомогательная база кода представляет собой комплект тестов и действует как набор подтверждений, гарантирующих, что основная база кода работает правильно и без ошибок. Разработчики запускают эти тесты в процессе разработки, чтобы убедиться, что новый код не ухудшает существующие возможности. Для выполнения сценариев тестирования можно использовать и внешние инструменты, чтобы автоматизировать процесс утверждения. Продукты, предоставляющие сервис CI, автоматически запускают сценарии тестирования проекта при возникновении событий, заданных пользователем. Обычно, когда разработчик отправляет код, используя систему контроля версий, это событие запускает автоматическое выполнение полного комплекта тестов.

Автоматизация сборки

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

Автоматические развертывания

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

Сравнение инструментов непрерывной интеграции

Bitbucket Pipelines

Описание. Bitbucket Pipelines — это инструмент CI, напрямую интегрированный в Bitbucket, облачную систему контроля версий Atlassian. Если ваш проект уже находится в Bitbucket, то Bitbucket Pipelines — это следующий простой шаг на пути к CI. Bitbucket Pipelines управляется с помощью кода, поэтому вы можете легко делать коммиты определений конвейеров и запускать сборки. Bitbucket Pipelines дополнительно предлагает непрерывную поставку (CD). Это означает, что проекты, созданные с помощью Bitbucket Pipelines, можно развернуть и в рабочей инфраструктуре

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

  • Простая настройка и конфигурация
  • Единый интерфейс Bitbucket
  • Облако стороннего поставщика

Веб-сайт: https://bitbucket.org/product/features/pipelines

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

GitLab

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

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

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

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

Atlassian Bamboo

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

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

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

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

Какой инструмент CI лучше всего подходит вашей компании?

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

Поддержка системы контроля версий

Основным принципом системы CI/CD является поддержка и интеграция базовой системы контроля версий (VCS). Наиболее популярны системы контроля версий Git, Subversion, Mercurial и Perforce. Облачные инструменты CI могут поддерживать все эти системы или некоторые из них. Очень важно выбрать инструмент CI, который поддерживает систему контроля версий ваших проектов.

Сравнение локальной и облачной среды

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

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

Поддержка контейнеров

Контейнеризация — это современная тенденция разработки программного обеспечения. С ее помощью можно распространять неизменяемую, стандартную, изолированную копию приложения. Контейнеризацию поддерживают такие инструменты, как Docker и Kubernetes. Современные инструменты CI поддерживают интеграцию контейнеров в процесс CI/CD. Контейнеры решают проблему «а на моей машине все работает», упаковывая код приложения в виде моментального снимка зависимостей на уровне системы. Такой подход гарантирует, что при выполнении созданного командой кода в инструменте CI он будет выполняться в копии локальной среды. Это устраняет целый ряд проблем с совместимостью среды, которые возникают без контейнеров.

Плагины и интеграции с решениями сторонних разработчиков

Инструменты CI приносят еще больше пользы при интеграции с остальным комплектом технологий. Их можно использовать для сбора аналитики об эффективности и производительности команды разработчиков. Можно связывать инструменты CI с приложениями по планированию спринтов, чтобы автоматически обновлять статус спринта после поставки кода. Эти интеграции можно использовать для управления показателями KPI и дорожными картами команды разработчиков.

Начало работы с непрерывной интеграцией

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