Непрерывная поставка
Непрерывная поставка (CD) — это методика, предполагающая использование автоматизации для выпуска ПО короткими итерациями.
Что такое непрерывная доставка?
Непрерывная поставка — это подход, при котором команды в автоматизированном режиме часто и предсказуемо выпускают качественные продукты в рабочую среду из репозитория исходного кода.
Некоторые организации выпускают продукты вручную, передавая их от одной команды к другой, как показано на схеме ниже. Как правило, разработчики находятся в левой части этого диапазона, а эксплуатационный персонал — на стороне приема. При каждой передаче происходит задержка, что приводит к разочарованию команд и недовольству клиентов. В итоге запуск продукта превращается в затянутый и ненадежный процесс, задерживающий получение дохода.
Рисунок 1. Передача продуктов клиентам вручную
А теперь посмотрите на конвейер непрерывной поставки, представленный ниже. Он показывает, как разработчики пишут код на своих ноутбуках и выполняют коммиты этих изменений в репозиторий исходного кода, например в репозиторий Bitbucket. Под кодом мы подразумеваем тестируемую систему, тесты, а также инфраструктуру, используемую для развертывания и обслуживания системы. Сервис Bitbucket Pipelines позволяет передавать продукт с этапа тестирования в промежуточную, а затем в рабочую среду, чтобы клиенты получали все новые возможности.
Рисунок 2. Автоматический выпуск через конвейер непрерывной поставки
Как устроена непрерывная поставка?
Конвейер непрерывной поставки может включать ручной шлюз непосредственно перед выпуском в рабочую среду. Для ручного шлюза необходимо вмешательство человека, и в организации могут существовать сценарии, требующие наличия ручных шлюзов в конвейерах. Бывают сомнительные ручные шлюзы, есть и вполне оправданные. Один из допустимых сценариев позволяет бизнес-команде принимать решение о выпуске в последнюю минуту. Техническая команда имеет готовую версию продукта в конце каждого спринта, тогда как бизнес-команда принимает окончательное решение о выпуске продукта для всех клиентов, группы пользователей или для людей, живущих в определенном месте.
Основным фактором, определяющим структуру конкретного конвейера непрерывной поставки, является архитектура продукта, который проходит через конвейер. Если архитектура продукта состоит из тесно взаимосвязанных элементов, конвейер принимает вид сложной графической структуры, в которой различные конвейеры переплетаются между собой и в конечном счете выводят продукт в рабочую среду.
Архитектура продукта также влияет на различные этапы конвейера и на то, какие артефакты создаются на каждом этапе. Сначала конвейер собирает компоненты — мельчайшие элементы, на которые может быть разделен продукт и которые могут подвергаться тестированию. Например, таким компонентом можно назвать библиотеку, собранную конвейером. Это этап компонентов.
Слабосвязанные компоненты образуют подсистемы — минимальные работоспособные модули, доступные для развертывания. Например, сервер — это подсистема. Микросервис, работающий в контейнере, — тоже подсистема. Это этап подсистем. В отличие от компонентов, подсистемы можно запускать и тестировать.
Таким образом, конвейер теоретически можно обучить сборке системы из слабосвязанных компонентов, если вся система должна выпускаться в виде единого целого. Это этап систем.
Однако использовать структуру, в которой подсистемы собираются в одну систему, не рекомендуется. См. иллюстрацию на рис. 3.
Рисунок 3. Подсистемы, собираемые в систему
Такой категоричный подход заставляет самые быстрые подсистемы двигаться со скоростью самых медленных. «Где тонко, там и рвется» — вот что можно сказать о командах, которые становятся жертвой этого архитектурного шаблона.
После проверки собранная система без дальнейших изменений выводится на заключительный этап — этап рабочей среды.
Обратите внимание, что эти этапы — скорее логические, чем физические, и создаются исключительно с целью разбиения крупной задачи на несколько меньших подзадач. В зависимости от архитектуры и требований этапов может быть меньше или больше.
Скорость без качества бесполезна для наших клиентов. Непрерывное тестирование — это способ, при котором автоматические тесты интегрируются в конвейер поставки ПО и проверяют каждое изменение, проходящее через него. Тесты выполняются на каждом этапе конвейера с целью проверки артефактов, созданных на этом этапе. Модульные тесты и статический анализ кода используются для проверки компонентов на этапе компонентов в конвейере. Тесты функций, производительности и безопасности обеспечивают проверку на этапе подсистем. Интеграционные тесты, тесты производительности и безопасности используются для проверки систем на этапе систем. И наконец, на этапе рабочей среды продукт проверяется с помощью smoke-тестов.
Интеграция автоматических тестов с конвейером
Монолитная архитектура продукта, или «большой комок грязи», может привести к образованию «большого комка тестов». Рекомендуется инвестировать в микросервисы, чтобы продвигать независимо развертываемые артефакты по конвейерам без необходимости в высокоинтегрированной среде для сертификации. Кроме того, независимо развертываемые артефакты позволяют быстрым командам не задерживаться из-за более медленных.
Ценность непрерывной поставки
Конвейер поставки ПО сам по себе является продуктом и приоритетом для бизнеса, в противном случае не следует пропускать через него продукты, приносящие доход. Непрерывная поставка приносит пользу тремя способами. Она увеличивает скорость, производительность и стабильность работы команд разработчиков ПО.
Скорость команды
Скорость должна быть разумной, а не самоубийственной. Конвейеры предназначены для поставки качественных продуктов клиентам. Если команды не соблюдают дисциплину, конвейеры тоже могут выдавать в рабочую среду код с ошибками — просто на высокой скорости. Автоматизированные конвейеры поставки ПО помогают организациям быстро реагировать на изменения рынка.
Продуктивность
Когда такие трудоемкие задачи, как подача запроса по каждому изменению, передаваемому в рабочую среду, выполняются конвейерами, а не людьми, производительность резко возрастает. Это позволяет scrum-командам сосредоточиться на потрясающих продуктах вместо того, чтобы тратить силы на логистику. Это также может поднять настроение участников команды, усилить их вовлеченность в работу и желание дольше оставаться в команде.
Устойчивость
Устойчивое развитие играет ключевую роль для любого бизнеса, не только в сфере информационных технологий. Фраза «Софт пожирает мир» устарела: софт уже поглотил мир! В конечном итоге каждая компания в любой сфере, будь то здравоохранение, финансы, розничная торговля или другая отрасль, использует технологии, чтобы выделиться среди конкурентов или превзойти их. Автоматизация помогает сократить или устранить повторяющиеся ручные задачи, не защищенные от ошибок, позволяя компании лучше и быстрее внедрять инновации в ответ на потребности клиентов.
Когда и где следует использовать непрерывную поставку?
Когда пора внедрять непрерывную поставку? Еще вчера.
Командам нужен единый бэклог с расставленными приоритетами, в котором:
- возможности непрерывной поставки учитываются, а не отодвигаются на задний план;
- критерии приемки пользовательских историй прямо предусматривают автоматизированную, а не ручную поставку программного обеспечения;
- критерии готовности (DoD) спринта не позволяют командам заканчивать спринты в случае, если продукт выпускается вручную.
Непрерывная поставка — правильное решение, но иногда его сторонникам нужно подтолкнуть остальных к трансформации. В конечном итоге правильно спроектированные конвейеры непрерывной поставки окупят себя.
Итак, кто же участники?
Некоторые организации поручают планирование и внедрение конвейеров непрерывной поставки неопытным исполнителям и на собственном горьком опыте узнают о сопутствующих нюансах. Назначение младших сотрудников сигнализирует командам, что непрерывная поставка имеет низкий приоритет. Настоятельно рекомендуется назначить ответственным старшего архитектора, обладающего глубоким пониманием технологии и бизнеса.
Не только непрерывная поставка
Независимо от того, на каком этапе пути к «постоянному всему» (интеграции, тестированию, поставке, развертыванию, аналитике и т. д.) вы находитесь, речь идет не о списке задач или конечной цели, а о постоянном улучшении, которое лежит в основе всего.
Рано или поздно в создание конвейера непрерывной поставки вовлекается каждый член организации — руководители, разработчики, менеджеры продуктов, специалисты по информационной безопасности, эксплуатации, юридической поддержке, управлению данными, рисками, обеспечению соответствия требованиям и так далее. Конвейеры пробивают барьеры и разрушают стены. Мы все так или иначе являемся частью этой трансформации, а новая реальность подразумевает, что на рельсы непрерывности становятся все!
Начало работы с непрерывной интеграцией/непрерывной доставкой
Чтобы воспользоваться CI/CD на практике, можно использовать инструменты, автоматизирующие разработку, развертывание и тестирование. Одни инструменты подходят для интеграции, другие — для разработки и развертывания, а третьи — для тестирования.
Компания Atlassian предлагает решение Open DevOps со сквозными процессами DevOps, в том числе CI/CD. Командам будут доступны многочисленные инструменты CI/CD, включая Bitbucket Pipelines — комплексный сервис, встроенный в Bitbucket. С его помощью можно выполнять автоматическую сборку, тестирование и даже развертывание кода, используя файл конфигурации из вашего репозитория. Кроме того, Open DevOps интегрируется с другими инструментами для непрерывной интеграции и поставки, такими как Harness, GitLab, JFrog, Codefresh и CircleCI.
Взгляните на наши интеграции Open DevOps. И не забудьте ознакомиться с учебными руководствами по CI/CD для DevOps.