Со времени появления концепции DevOps по поводу нее в ИТ-кругах идут ожесточенные споры. Некоторые считают ее маркетинговым увлечением, другие убеждены в том, что она совершит революцию в ИТ-операциях. Из года в год аналитики предрекают ее стремительное распространение, но, несмотря на то что действительно наблюдается устойчивый рост числа сторонников DevOps, стать массовым явлением этой концепции пока так и не удалось. Вина в этом во многом лежит на предприятиях, руководство которых так и не смогло понять сути DevOps и того выигрыша, который она способна принести в процессе операционной деятельности.
Из методологии, объединяющей разработчиков и операционные группы, DevOps превратилась в стратегию трансформации всего бизнеса в единый операционный центр. Упрощая общение, взаимодействие и интеграцию внутри организации, DevOps способствует более оперативной доставке ИТ-сервисов и упрощает управление ИТ, одновременно происходит и оптимизация затрат.
Что представляет собой DevOps?
DevOps – это ИТ-философия и практика, которая позволяет объединить персонал, занимающийся разработкой, операционной деятельностью и тестированием, в межфункциональные группы, полностью отвечающие за весь жизненный цикл программного продукта или сервиса. Повышая эффективность взаимодействия различных групп в рамках всей организации, DevOps формирует устойчивую операционную среду, помогающую ускорить вывод программного продукта на рынок, уменьшить число человеческих ошибок и недочетов, расширить возможности управления версиями и оптимизировать затраты – все это в совокупности способствует лучшему управлению ресурсами.
Путь к DevOps
Путь к DevOps начинается с изучения существующих бизнес-процедур и каналов предоставления сервисов, а также с четкого определения целей, которых вы хотите достичь с помощью стратегии DevOps. Предстоит решить, будете ли вы строить с нуля или займетесь перестройкой. Строительство с нуля упрощает реализацию, но риск отказов возрастает, поскольку при развертывании сервисов используется новая методология. При перестройке процент отказов ниже, но реализация сложнее из-за использования методологий параллельного развертывания.
Что бы вы ни выбрали, первым делом лучше опробовать все на экспериментальном проекте. К примеру, если цель заключается в ускорении выхода на рынок, можно поставить задачу запустить продукт с помощью итерационной модели DevOps в самые сжатые сроки и посмотреть, во что все это выльется.
После того как замысел проекта определен, важное значение для успеха DevOps будет иметь выполнение следующих шести условий.
1. Подготовка к культурным переменам
DevOps объединяет людей, процессы и инструменты для трансформации организации в единое целое. Культурный сдвиг составляет основу DevOps, и изменение культуры компании будет одной из самых сложных проблем, с которой ей придется столкнуться. Простое введение новых политик и процедур – возможно, поначалу и успешное – обернется неудачами в долгосрочной перспективе, если не изменится культура, лежащая в основе работы организации.
Успешный переход на DevOps представляет собой движение в масштабах всей компании, начинающееся с управления верхнего уровня и спускающееся к персоналу нижнего звена. Придется отделить названия от функций и убедиться в том, что разработчики и операционный персонал осведомлены о тех преимуществах, которые обретет организация при их объединении в межфункциональные группы.
Чтобы облегчить культурный сдвиг, нужно менять и стимулы. Наиболее эффективная модель стимулирования — поощрять межфункциональные команды за улучшение клиентского восприятия, одновременно сводя потери от неудач для организации к минимуму. В некоторых организациях разработчиков просят откликаться на звонки, с тем чтобы они могли лучше понять операционные задачи. В некоторых культурный сдвиг пытаются ускорить, выделяя среди разработчиков и операционного персонала «звезд», мотивирующих остальных членов группы. В остальных находят низовых лидеров, которые помогают сгладить переход к DevOps.
2. Формирование процесса непрерывной интеграции, платформы непрерывного предоставления
После того как вся организация охвачена преобразованиями, следует сконцентрироваться на самой команде DevOps. Главный вопрос – предоставить разработчикам точную и своевременную информацию о состоянии производственной среды, с тем чтобы они могли точно планировать развертывание. При скоординированном подходе «сборки и запуска» разработчик, занимающийся созданием продукта или сервиса, будет считаться его «владельцем» в рамках производственного цикла. Такое «владение» может распространяться на определенный срок, требуемый для устранения основных ошибок, или на весь жизненный цикл продукта или сервиса. Оба указанных подхода работают, идея же состоит в том, чтобы операционный персонал, инициируя обратную связь, не нес ответственности за решение возникающих вопросов.
Группа DevOps проходит через все этапы жизненного цикла сервиса, начиная от определения требований и заканчивая последующим планированием, разработкой и поддержкой. Эта команда, обладающая глубокими знаниями платформы и инфраструктуры, будет заниматься также отладкой и устранением проблем, выполняя функцию, которая традиционно отводится специалистам, занимающимся сопровождением. Здесь задача заключается в создании конвейера автоматизированного развертывания, благодаря которому запуск полностью автоматического сценария в любой среде происходит в течение нескольких минут. В рамках конвейера развертывания непрерывная интеграция, непрерывная разработка, непрерывное тестирование и непрерывное развертывание должны сливаться в единое целое.
Вот как это работает:
- при изменении кода система управления версиями запускает нужный процесс на сервере сборки;
- этот процесс компилирует код, объединяя все необходимые для развертывания ресурсы в пакеты;
- полученные пакеты автоматически тестируются для гарантии качества кода и его выполнения в соответствии с ожиданиями;
- если этап фиксации завершился успешно, приложение развертывается в тестовой среде, где изучается группой контроля качества;
- наконец, когда приложение будет одобрено, релиз направляется непосредственно в производство.
3. Создание среды непрерывного тестирования
Чем быстрее вы получите по обратной связи информацию о реакции на изменения, тем выше окажется качество программного обеспечения. При традиционной методологии водопада весь написанный код передается на тестирование и в случае успешного прохождения тестов направляется в производство. В противном случае код возвращается на доработку. Все это отнимает много времени и снижает надежность.
При использовании DevOps тестирование является составной частью разработки, а специалисты по контролю качества входят в межфункциональную группу DevOps. Тестирование, выполняемое вручную или автоматически, идет непрерывно на всем протяжении конвейера доставки. Любое изменение рассматривается как потенциальный кандидат в релизы, а цель заключается в том, чтобы сократить время между началом тестирования и выпуском релиза до минимума. Для безопасности формируется костяк доставки с одним поблочным и одним приемочным тестом, которые интегрируются в сценарий автоматического развертывания. По мере продвижения вперед можно увеличивать количество тестов и распространять их на весь конвейер доставки.
К непрерывному тестированию применимы следующие рекомендации:
- автоматизируйте процедуры и этапы тестирования в максимально возможной степени (тестирование вручную необходимо лишь при проверке удобства использования и пробных испытаниях);
- выделяйте наборы тестов для простых и быстрых процедур (разработчики могут быстро выполнять поблочные тесты перед фиксацией, а интеграционные тесты можно выполнять на серверах сборки);
- ведите расширенные журналы;
- начинайте тестирование раньше и проводите его чаще;
- убедитесь в том, что вы используете достаточное число методов контроля качества.
4. Внедрение системы непрерывного развертывания
Непрерывное развертывание расширяет возможности непрерывной доставки. Каждая сборка, успешно прошедшая полный цикл тестирования, передается на вход процедуры автоматического развертывания. Тем самым исключается необходимость человеческого вмешательства для определения того, что и когда следует развертывать. Благодаря непрерывному развертыванию организации могут быстро доставлять новые функции и обновления, заранее внося в продукт необходимые изменения.
Поскольку проверка вручную перед развертыванием кода не выполняется, непрерывное развертывание выглядит несколько пугающе. Но если у вас налажена хорошая система доставки, беспокоиться о потере контроля над кодом в процессе производства не стоит. DevOps дает возможность более полно контролировать функциональность каждого отдельно взятого сервиса, делая сборки доступными лишь избранным пользователям. А автоматический выпуск функциональных релизов осуществляется в заранее определенное время.
Разработчики должны хорошо продумывать свой код, а специалистам по контролю качества следует подготовить актуальные наборы тестов. При правильно организованном конвейере доставки система автоматически решает, что и когда фиксировать в репозитории, что и когда запускать в производство и т. д.
Непрерывное развертывание необходимо дополнить непрерывным мониторингом и обратной связью. При своевременной обратной связи разработчики знают, какие функции востребованы конечными пользователями. Это помогает им сосредоточиться на наиболее важных функциях, экономя тем самым время и силы.
5. Использование нового и старого развертывания
Для сокращения простоев и минимизации рисков организации могут использовать так называемое новое/старое развертывание. При внесении изменений запускается процесс нового развертывания, и оно выполняется параллельно со старым. Оба вида развертывания осуществляются фактически одновременно. Поначалу новому развертыванию выделяется небольшая часть трафика. В случае успеха в его пользу постепенно добавляется все больше трафика, а старое развертывание замедляется. В случае сбоя трафик перераспределяется от нового развертывания к старому. Это позволяет осуществлять переключение между средами развертывания без простоев и отказов систем. Таким образом новые функции внедряются, например, на сайтах Facebook и Twitter, которые не могут позволить себе останавливать сервисы в произвольный момент времени.
6. Непрерывный мониторинг производительности
В автоматической среде мониторингу производительности отводится ключевая роль, и в этом поможет ряд специализированных инструментов. Перед тем как выбрать инструменты, необходимо определить основные параметры мониторинга. С учетом того, что в вашей системе выполняются сотни сервисов и процедур, отслеживать абсолютно все нет никакой возможности. Сосредоточиться следует на пяти наиболее важных категориях.
- Циклы разработки. Чтобы иметь представление о функционировании конвейера автоматического развертывания, следите за тем, как часто в код вносятся изменения, сколько новых функций реализовано, какое количество ошибок обнаружено и исправлено и т. д.
- Развертывание. Если процедура автоматического развертывания завершается неудачей, нужен инструмент, который предупредит об этом соответствующих специалистов. Большинство серверов непрерывной интеграции автоматически пересылают сообщения на серверы чатов в случае сбоя процедур развертывания или сборки.
- Уязвимости. После передачи кода в производство управление уязвимостями следует осуществлять автоматически. Неважно, идет ли речь об известных уязвимостях (присутствующих в National Vulnerability Database) или неизвестных (возникших в результате небезопасных действий), в любом случае система обязана их обнаруживать и минимизировать последствия.
- Состояние серверов. Мониторинг серверов имеет важное значение практически для любого типа инфраструктуры, не только при использовании DevOps. Производительность и соглашения об уровне обслуживания (service-level agreements, SLA) системы зависят от состояния сервера. Есть несколько инструментов, помогающих решать эту задачу. Следует также осуществлять мониторинг инфраструктуры.
- Производительность приложений. Для определения ключевых моментов производительности и регресса приложений необходимо следить за их функционированием и своевременно принимать необходимые решения. Поможет вам в этом целый ряд инструментов, в том числе AppDynamics и New Relic. Инструменты мониторинга производительности приложений (application performance monitoring, APM) предоставляют дополнительную информацию о характере использования приложений и их производительности.
Необходимо анализировать журналы приложений. Инструменты мониторинга журналов собирают большие объемы данных из различных источников и размещают их в централизованной базе данных. Важная роль отводится мониторингу пользовательской активности. Анализируя использование ресурсов и поведенческие шаблоны, вы можете своевременно масштабировать инфраструктуру при внедрении новых функций, добиваясь увеличения производительности.
Необходимо продумать также вопросы соблюдения требований регулирующих органов. Должны быть разработаны и внедрены строгие политики безопасности, а кроме того, нужна система, отслеживающая сбои аудита и недочеты конфигурации средств безопасности. Инструменты управления конфигурацией, такие как Puppet, осуществляют непрерывный мониторинг инфраструктуры, проверяя соблюдение нормативных требований и автоматически возвращая систему в желаемое состояние.
Ключевые инструменты DevOps
Хотя во многом успех DevOps зависит от базовых культурных сдвигов, важная роль отводится и инструментам. Вот краткий перечень инструментов, которые, как правило, используются в среде DevOps:
- репозиторий исходного кода (Git, CloudForce, TFS, Subversion);
- сервер сборки (SonarQube, Jenkins, Artifactory);
- управление конфигурацией (Puppet, Ansible, Salt, Chef);
- автоматизация тестирования (Selenium, Water);
- виртуальная инфраструктура (Amazon Web Services, Microsoft Azure, VMware vCloud).
***
Переход от традиционной разработки программного обеспечения к DevOps – непростая задача, требующая значительных изменений внутри организации. Главное здесь – правильно распределить людей между процессами и оснастить их правильными инструментами. И в случае успешного применения передового опыта при создании каналов предоставления сервисов с непрерывной интеграцией, непрерывными тестированием и развертыванием переключение на DevOps обещает принести вашей организации немалую выгоду.
– Adam Bertram. 6 steps to devops success. CIO. OCT 18, 2017