Роль CI/CD в DevOps

Непрерывная интеграция, доставка и развертывание (дальше мы будем использовать сокращение CI/CD) — это часть методологии DevOps. Другими словами, это технологии, воплощающие принципы DevOps. Если вы еще не очень хорошо знакомы с этим термином, то, возможно, не понимаете точно, что же такое DevOps и как это связано с Agile-разработкой программного обеспечения. Если у вас будет общее представление о том, как развивались подходы к разработке ПО и какие проблемы стремятся решить методологии Agile и DevOps, вы сможете эффективнее использовать процессы CI/CD.

Agile — переворот в разработке ПО

Цифровая революция изменила отношение к ПО и IT: если прежде в большинстве организаций (за исключением издателей ПО) они играли лишь вспомогательную роль, то теперь стали неотъемлемой частью множества отраслей экономики.

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

В 2001 году, когда эта тенденция только начала проявляться, группа разработчиков ПО разработала манифест Agile, предлагая решение для ряда проблем, существовавших в тот момент в сфере разработки ПО. Манифест описывает ценности и принципы разработки программного обеспечения, которые могут быть реализованы в виде различных методологий. Одна из наиболее известных из них — Scrum.

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

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

Основные положения DevOps

Программисты охотно принимали принципы Agile и меняли подходы к разработке ПО, однако практически не работали совместно с командами, отвечающими за следующие этапы.

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

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

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

Культурный сдвиг

Термин DevOps сочетает в себе разработку (DEVelopment) и операционную деятельность (OPerationS). Это подчеркивает необходимость интеграции работы всех команд для эффективной доставки работающего ПО. При этом на самом деле речь идет не только об этих двух командах, но обо всех, кто участвует в разработке и доставке ПО: они должны действовать согласованно для достижения общей цели.

Центральное место в DevOps занимает культура общей ответственности, взаимного доверия и открытой коммуникации. Команда разработчиков не может считать работу завершенной после создания локально работающей сборки. Для создания кода, готового к развертыванию в производственной среде, разработчики должны иметь возможность отслеживать все промежуточные шаги от разработки до релиза. Необходимо преодолеть разобщенность и организовать совместную работу с командами, отвечающими за QA, безопасность и инфраструктуру, с учетом их вклада в общий процесс.

Инструменты и автоматизация DevOps

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

Эффективные процессы

Методология DevOps возникла в то время, когда разработчики программного обеспечения начали применять принципы «бережливого производства». Эта концепция предполагает снижение издержек за счет оптимизации всех этапов процесса, повышение качества и уважение ко всем людям.

Методология DevOps в значительной степени восприняла эти идеи. Она нацелена на повышение эффективности разработки ПО за счет оптимизации всего процесса в целом и максимально быстрого получения отзывов на новый код благодаря коротким циклам обратной связи.

Это предполагает более ранее выполнение этапов, следующих за разработкой, и максимально быстрое устранение найденных проблем — неуспешных тестов, уязвимостей или ошибок сборки.

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

Благодаря внедрению DevOps преимуществами методологии Agile могут пользоваться не только разработчики. Команды на следующих этапах приспосабливаются к темпам разработки: работа с меньшими объемами кода упрощает выявление проблем благодаря меньшему числу переменных. Кроме того, быстрое получение обратной связи избавляет от лишних затрат на тестирование сборок, которые впоследствии нельзя будет использовать. Таким образом, организация в целом выигрывает от коротких циклов работы.

Практическая реализация DevOps

Создание автоматического CI/CD-пайплайна позволяет реализовать принципы DevOps на практике.

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

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

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

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

Заключение

Задача CI/CD и DevOps в целом — ускорить процесс доставки нужного пользователями ПО без ущерба для качества. Принципы DevOps перекликаются с идеями Agile и «бережливого производства» и дополняют их. Рассматривая весь процесс разработки и доставки ПО в целом и оптимизируя каждый его этап, можно быстрее создавать продукт и быстрее получать обратную связь. Тем самым обеспечивается непрерывное развитие и улучшение продукта.