DevOps (DEVelopment OPeration) – это набор практик для повышения эффективности процессов разработки (Development) и эксплуатации (Operation) программного обеспечения (ПО) за счет их непрерывной интеграции и активного взаимодействия профильных специалистов с помощью инструментов автоматизации. Девопс позиционируется как Agile-подход для устранения организационных и временных барьеров между командами разработчиков и других участников жизненного цикла ПО (тестировщиками, администраторами, техподдержкой), чтобы они могли быстрее и надежнее собирать, тестировать и выпускать релизы программных продуктов [1].
История появления
Термин «DevOps» был популяризован серией встреч «DevOps Days», прошедших в 2009 году в Бельгии [2]. Одной из наиболее важных теоретических работ по DevOps считается книга Патрика Дюбуа, Джина Ким, Джеза Хамбл и Джона Уиллис «Руководство по DevOps. Как добиться гибкости, надежности и безопасности мирового уровня в технологических компаниях», впервые опубликованная на английском языке в 2016 году. К этому основателей нескольких софтверных компаний и независимых ИТ-консультантов подтолкнул накопленный опыт работы в крупных проектах [1].
Однако само понятие DevOps зародилось в начале 2000-х годов, когда в ИТ-мире больших корпораций возникла проблема рассогласования рабочих процессов, при которой нормальная работа программного продукта нарушена из-за функционального и организационного разделения тех, кто пишет код, и тех, кто выполняет его развертывание и поддержку. У разработчиков и специалистов по эксплуатации продукта часто бывают разные и даже противоречащие друг другу цели, руководители подразделений и ключевые показатели эффективности. Рабочие места разнопрофильных участников жизненного цикла ПО зачастую располагаются в разных локациях. Такая разрозненность и нарушение коммуникации внутри компании приводит к удлинению сроков решения задач, сверхурочной работе, сорванным релизам и недовольству клиентов [1].
Концепция DevOps предлагает решать эту проблему с помощью приложения принципов Agile не только к разработке и тестированию, но и к процессам эксплуатации ПО, т.е. к развертыванию и поддержке. Таким образом, популярность DevOps возникла, в том числе благодаря распространению Agile-практик, ориентированных на ускорение процессов поставки готового продукта и увеличение количества выпускаемых версий. Кроме того, дополнительным драйвером развития девопс стала микросервисная архитектура, когда система состоит из набора отдельных слабосвязанных модулей, реализация каждого из которых находится в зоне ответственности одного человека, который разрабатывает, тестирует и развертывает ПО. Благодаря небольшому размеру каждого модуля (сервиса), его архитектура может создаваться путем непрерывного рефакторинга, что уменьшает трудоемкость предварительного проектирования и позволяет постоянно выпускать новые релизы программного продукта [2].
Процессы и объекты девопс
DevOps, как и другие Agile-практики, ориентирован на командную работу, где рассматриваются все аспекты жизненного цикла ПО, от программного кода до эксплуатации продукта конечным пользователем [2]:
- Code (Код) – разработка и анализ, контроль версий и слияния кода;
- Build (Сборка) – непрерывная интеграция различных сборок;
- Test (Тест) – непрерывное тестирование, обеспечивающее обратную связь по бизнес-рискам;
- Operate (Работа с пакетами) – репозиторий артефактов, предварительная установка приложения;
- Release (Выпуск) – управление изменениями, официальное утверждение выпуска, автоматизация выпуска;
- Deploy (Развертывание конфигурации) – управление инфраструктурой как кодом;
- Monitor (Мониторинг) – мониторинг производительности приложений, опыт работы с конечным пользователем.
Цели и задачи DevOps
Поскольку процессы девопс охватывают весь цикл поставки ПО, выделяют несколько основных целей этого подхода [2]:
- сокращение времени для выхода на рынок;
- снижение частоты отказов новых релизов;
- сокращение времени выполнения исправлений;
- уменьшение количества времени на восстановления при сбое новой версии или других случаях отключения текущей системы.
Эти цели достигаются через решение следующих задач:
- согласование процессов разработки и поставки ПО с эксплуатацией;
- автоматизация процессов разработки, тестирования и развертывания;
- непрерывное тестирование качества приложений;
- управление ИТ-инфраструктурой как кодом;
- управление изменениями;
- непрерывный мониторинг производительности приложений и состояния инфраструктуры.
Таким образом, DevOps нацелен на предсказуемость, эффективность, безопасность и ремонтопригодность операционных процессов, а также регулярную поставку надежно работающего продукта, его обновлений и обслуживания.
Главные принципы DevOps
Рассматривая DevOps как масштабирование Agile-подхода на весь процесс разработки, внедрения и сопровождение ПО, можно выделить 5 основных принципов (CALMS) его реализации с целью увеличения частоты релизов и повышения ответственности команды за продукт [1]:
- Культура (Culture) – кросс-функциональное сотрудничество разнопрофильных специалистов и команд за счет единого информационного пространства проектного контента, открытых каналов коммуникаций и постоянного общения всех участников;
- Автоматизация (Automatization) – использование инструментов непрерывной поставки с прогоном каждой правки кода через серию автоматизированных тестов, часто использующих облачную инфраструктуру, и последующую упаковку успешных сборок с дальнейшим перемещением на рабочий сервер с помощью автоматизированных развертываний и управления инфраструктурой как кодом через конфигурации саморазвертываемых сред;
- Бережливость (Lean) – устранение действий с низкой полезностью и ускорение процессов, непрерывное совершенствование через регулярный ретроспективный анализ, раздельное тестирование различных инструментов, принятие поражений, возможности быстрого обнаружения проблем и их незамедлительного решения;
- Измерения (Measurement) производительности, например, продолжительность работы пользователей с продуктом, частота появления в логах сообщений о критических ошибках – необходимы ясные и четкие критерии оценки работы, показатели эффективности процессов;
- Обмен (Sharing) – совместная ответственность и разделение успехов, выпуск и обеспечение работы приложения осуществляются теми же людьми, что выполняли его сборку, т.е. разработчики (Developers) и операторы (Operators) взаимодействуют на каждом этапе жизненного цикла приложения.
Достоинства девопс
Благодаря стандартизации и автоматизации процессов разработки и внедрения, DevOps дает следующие преимущества в управлении выпуском ПО [2]:
- события, документированные процессы управления и подробные отчеты легко отслеживать;
- разработчики имеют больше контроля над средой, предоставляя инфраструктуре более прикладное понимание продукта и процессов его эксплуатации;
- значительное сокращение времени выхода на рынок за счет «бесшовного» цикла разработки и внедрения;
- улучшение удовлетворенности клиентов;
- повышение качества и надежности продукции;
- увеличение производительности и эффективности;
- быстрота реагирования и высокая скорость экспериментов;
- расширение компетенций и ответственности разработчиков – программисты участвуют в настройке серверов и поиске ошибок, пишут автоматизированные тесты, сглаживая возможные инфраструктурные уязвимости в коде. Это сокращает количество ошибок при развертке приложения примерно в 5 раз [3].
Критика и недостатки DevOps
При всех достоинствах этого подхода, можно выделить следующие недостатки:
- Неполнота цикла – за бортом процессов девопс остаются важные этапы жизни ПО, как разработка и анализ требований, а также проектирование архитектуры. Также возможно упущение ручного тестирование, что может быть критично в некоторых случаях [3]. Например, если разработчики недостаточно качественно проанализировали требования и протестировали продукт, рассматривая его с точки зрения «идеального» кода, а не с позиции пользователей, результат может быть неудобным в эксплуатации [4].
- Недостаточный профессионализм участников, которые разбираются во всем (разработка, тестирование, развертывание, поддержка), но поверхностно.
- Высокая нагрузка на менеджмент – если у разработчиков и операторов нет общих целей, в этом виноваты менеджеры, не организовавшие эффективное взаимодействие между командами разнопрофильных специалистов. Для решения этой проблемы нужна новая система оценки менеджеров на основе отзывов от подчиненных [3].
В каких случаях эти недостатки становятся особенно критичными и почему DevOps подходит не всем и не всегда, читайте в нашей отдельной статье.
Методы и средства реализации: как работает DevOps
Методологически девопс поддерживает принципы Agile и Continuous delivery – непрерывной поставки ПО. Для организации процессов могут быть использованы такие методы Agile, как Scrum, Kanban и их варианты.
В плане инструментов для автоматизации процессов разработки, тестирования и развертывания используются следующие технологии и популярные средства их реализации:
- Распределенный контроль версий (Git, Mercurial, Subversion, CVS);
- Контейнеризация (Docker, Rocket, Kubernetes);
- Непрерывная интеграция – сборка и тестирование конечного продукта (Jenkins, TeamCity, Bamboo);
- Управление инфраструктурой как кодом (Puppet, Chef, Ansible);
- Виртуализация (Vagrant);
- Балансировка облачных ресурсов (VMware DRS).
За выполнение девопс-процессов отвечает DevOps-инженер, который синхронизирует все этапы создания программного продукта, от написания кода до тестирования и выпуска приложения. Такой специалист взаимодействует с отделами разработки и администрирования, а также автоматизирует выполнение их задач, внедряя вышеуказанные программные инструменты. Подробнее о сфере ответственности DevOps-инженера мы рассказывали здесь и здесь.
Поскольку DevOps-инженер совмещает множество профессий (администратора, разработчика, тестировщика и менеджера), то он должен иметь опыт администрирования различных операционных систем и облачных платформ. Также необходимы знания сетевых технологий и умения писать скрипты и код на нескольких языках программирования [5]. Как эти компетенции разделяются с другими участниками Agile-команды, мы рассмотрели здесь.
Кто и где используется DevOps и сколько за это стоит
DevOps может быть полезен практически любой организации, связанной с разработкой приложений или управлением большим количеством серверов. Крупные ИТ-гиганты вовсю нанимают (Amazon, Adobe, Google, Facebook и т.д.) и технологичные предприятия других сфер (Netflix, Walmart, Etsy и пр.) вовсю нанимают DevOps-инженеров. В России девопс также активно используется в банковской (Сбербанк, Альфабанк, Тинькофф-Банк), телекоммуникационной и ИТ-отраслях (Билайн, МТС, Mail.ru, Яндекс).
Мелкий бизнес и стартапы, цель которых – быстрее выпустить на рынок минимально жизнеспособный продукт, чтобы проверить новую идею, пока обходятся без девопс-инженеров. Что обусловлено, помимо организационных и методологических факторов, также и финансовой стороной вопросы: DevOps-инженеры зарабатывают больше всех в отрасли. На июль 2019 года зарплата таких специалистов колеблется в районе $71 тысяча долларов в год за рубежом [6], что составляет около 350 тысяч рублей в месяц, и 130-400 тысяч рублей в месяц в РФ [7].
Источники
- https://ru.atlassian.com/devops
- https://ru.wikipedia.org/wiki/DevOps
- https://vc.ru/hr/50165-chto-takoe-metodologiya-devops-i-komu-ona-nuzhna
- https://habr.com/ru/post/349796/
- https://habr.com/ru/company/itglobalcom/blog/447742/
- https://insights.stackoverflow.com/survey/2019
- https://yandex.ru/company/researches/2019/it-jobs