Втечение почти десяти лет DevOps пользуется повышенным вниманием, по крайней мере среди специалистов в ИТ-отрасли. Повсюду мы слышим похвалы аналитиков в адрес DevOps как лучшего, быстрого, безопасного и одновременно наименее затратного подхода к построению и развертыванию программного обеспечения. Это убедительные аргументы. В большинстве случаев понять преимущества DevOps не составляет труда. Но сегодня во многих компаниях у DevOps есть один существенный недостаток: применение теории DevOps на практике. Легко говорить об этом подходе на абстрактном уровне. Гораздо сложнее понять, как использовать DevOps в реальной среде или преобразовать принципы DevOps в действенные практические методы. По-видимому, это одна из причин, почему компании обычно сообщают о медленных темпах внедрения DevOps. Если перед вами стоит такая проблема, то в этой статье вы как раз найдете практические советы по работе с DevOps.
DevOps на высоком уровне
Прежде чем углубиться в стратегию реализации данного подхода на практике, рассмотрим, какие цели DevOps предположительно помогает достичь в теории.
Разные специалисты определяют DevOps по-разному, но основные споры разгораются вокруг нескольких ключевых принципов.
- Программисты, чья задача проектировать программы, должны тесно сотрудничать с ИТ-специалистами, традиционно отвечающими за развертывание и обслуживание программного обеспечения.
- Программное обеспечение необходимо доставлять непрерывно. Это значит, что изменения должны применяться к приложениям на постоянной, постепенной основе, а не крупными порциями один раз в несколько месяцев или лет.
- Все члены ИТ-организации должны иметь простой доступ к информации о процессе доставки программного обеспечения. Информацию не следует «складировать» в местах, где она доступна лишь определенным лицам или группам.
- Операции по доставке программного обеспечения должны масштабироваться, то есть иметь способность расширяться (а в некоторых случаях сокращаться, чтобы избежать излишних расходов), даже если размер группы не увеличивается. Для масштабирования критически важна автоматизация.
- ИТ-группы должны стремиться к непрерывному совершенствованию, выявляя слабые места в поставляемых приложениях, а затем используя полученную информацию для улучшения операций.
Нужно быть профессиональным ИТ-аналитиком, чтобы понять, как эти цели помогут улучшить программное обеспечение с точки зрения как специалистов, проектирующих его, так и пользователей.
Внедряем DevOps в практику
Труднее реализовать конкретные процессы и инструменты, обеспечивающие перечисленные выше цели. В отличие от многих ИТ-концепций, таких как «облако» и «автоматизированное тестирование», внедрение DevOps не сводится просто к использованию нового типа инфраструктуры или нового типа инструмента. Недостаточно также нанять нужных специалистов, хотя некоторые компании ошибочно считают, что наоборот (именно поэтому «инженер DevOps» — такая востребованная позиция у кадровиков).
В действительности реализация DevOps на практике требует изменения конфигурации всего процесса доставки программного обеспечения, для этого необходимы разнообразные новые инструменты, а также применение существующего инструментария новыми способами.
Помня об этих трудностях, перейдем к практическим советам по реализации DevOps.
1. Выбор необходимых инструментов
Практическую реализацию DevOps следует начинать с подбора необходимых инструментов. Определенного набора инструментов, необходимого для достижения целей, связанных с DevOps, не существует, но, как правило, требуется следующее:
- Сервер непрерывной интеграции, такой как Jenkins или TeamCity. Такой инструмент помогает обрабатывать новый программный код со скоростью непрерывной доставки.
- Инфраструктура автоматизированного тестирования, такая как Selenium, с помощью которой можно быстро тестировать приложения в различных средах.
- Инструменты мониторинга программного обеспечения, которые помогают обнаружить проблемы доступности и производительности. В идеальном случае эти инструменты используются не только для рабочих приложений, но и на этапах предварительной подготовки к выпуску в канале доставки программного обеспечения.
- Средства обмена данными, такие как Slack и Trello, которые помогают упростить обмен информацией между рабочими группами.
Другие полезные типы инструментов:
- Инструменты управления настройками, такие как Ansible или Puppet. Эти инструменты помогают автоматизировать подготовку инфраструктуры и развертывание приложений. Они необязательны, если масштаб операции доставки программного обеспечения мал, но критически важны при масштабировании.
- Инструменты оркестровки приложений, такие как Kubernetes, также критичны для крупномасштабных развертываний программного обеспечения.
2. Определение инфраструктуры
В дополнение к применению подходящих инструментов для DevOps необходимо определить тип инфраструктуры, вместе с которым будут использоваться инструменты. Рассмотрите следующие (перекрывающиеся до некоторой степени) варианты:
- «Облачная» инфраструктура IaaS, которая обеспечивает более высокую масштабируемость и переносимость, чем локальная инфраструктура.
- Контейнеры Docker полезны для непрерывной доставки, поскольку упрощают запуск однажды спроектированного программного обеспечения в любом месте (при условии поддержки Docker, но это справедливо для большинства современных сред Linux и Windows).
- Бессерверные функции, еще один строительный блок для экономичного масштабирования развертывания приложений.
- Возможно, вы уже используете некоторые или все перечисленные компоненты инфраструктуры. Чтобы наиболее эффективно задействовать их для DevOps, следует найти путь оптимальной интеграции этих ресурсов в канал непрерывной доставки, доступный всем членам вашей ИТ-группы.
3. Реорганизация (или расширение) группы
Как отмечалось выше, сегодня заметно вырос спрос на «инженеров DevOps», и вы найдете много ИТ-специалистов, подготовленных именно для DevOps. Ввести этих людей в свою группу — один из способов практической реализации DevOps.
Однако вам не придется нанимать множество новых инженеров или менять штатное расписание. Вы можете реорганизовать существующую ИТ-группу. Если в настоящее время она разделена на разные группы и программисты отделены от обслуживающего персонала, то лучше разрушить эти барьеры. Программисты не обязательно начнут работать в отделе обслуживания и наоборот, но нужно организовать эффективные каналы обмена информацией между разными группами, в том числе с использованием описанных выше инструментов.
Обратите также внимание на подходы, в рамках которых отдельные программисты каждую неделю проводят часть времени в отделе обслуживания, или организуйте регулярные совещания между специалистами разных подразделений.
Скорее всего, вы этим не ограничитесь. Охват каналами обмена данными других членов ИТ-организации, например инженеров по качеству программного обеспечения и специалистов по безопасности, позволит внедрить методы DevOps и обеспечит максимальную прозрачность ИТ-операций.
Вы можете также нанять инженеров DevOps, но моя общая рекомендация — рассматривать их больше как проводников, способствующих связям между существующими ИТ-группами, но не заменяющих их.
4. Реализация процессов реагирования на отклики
Постоянные связи между ИТ-группами сами по себе недостаточны, чтобы достичь уровня непрерывных улучшений, приоритизируемых DevOps. Позаботьтесь о реализации конкретных процессов, обеспечивающих действенный отклик групп на информацию, которой они обмениваются друг с другом.
Это могут быть еженедельные или ежемесячные совещания, на которых различные группы собираются вместе для обсуждения выявленных проблем (таких, как падение производительности) и разработки планов их устранения (например, способов подготовки нового кода).
В идеале ваша группа на повседневной основе учитывает обратную связь и вносит непрерывные улучшения. Однако наличие продуманного процесса, гарантирующего, что различные группы действуют на основании собранных данных, позволит на практике реализовать непрерывный цикл обратной связи, приоритизируемой DevOps.
Действительно, абстрактно рассуждать о DevOps легко, гораздо труднее воплотить этот подход на практике. Но при наличии верно подобранных инструментов, инфраструктуры, персонала и процессов реализация DevOps — вполне решаемая задача.