Методология DevOps и её роль в разработке ПО
«Командная работа – это секрет, благодаря которому обычные люди достигают необычных результатов.» - Ифеаний Энох.
DevOps разработка (Development Operations) – это популярная методология, объединяющая этапы разработки продукта. Главная её задача – интегрировать процессы друг в друга и заставить их работать сообща. Главная цель методологии DevOps – ускорить разработку и выпуск программного обеспечения путём контроля взаимодействия между разработчиками, тестировщиками и сисадминами.
Получается вся команда разработки просто принимает эту методологию и старается следовать её канонам? Нет, человеческий фактор зачастую берёт своё и участники не справляются с интеграцией самостоятельно. Именно поэтому на помощь приходит инженер по DevOps.
Специалист по системной интеграции (DevOps-инженер) – это специалист, внедряющий методологию в команду разработки. Он оказывает посильную поддержку на всех этапах, предотвращает разногласия и конфликты и, по возможности, автоматизирует некоторые процессы разработки.
С помощью двух определений сложно понять концепцию методологии и задачи DevOps-инженера. Именно поэтому в нашей статье мы копнули чуть глубже в теме технологии девопс и постарались как можно нагляднее объяснить какие преимущества даёт методология, какими бывают специалисты и какую роль они играют в повышении качества разработки ПО?
Немного истории
Представьте, что вы с друзьями решили нарисовать натюрморт, сидя в разных комнатах и передавая холст и краски под дверью. Один нарисует ноутбук, второй добавит гитару, третий впечатает корзину с фруктами, а итог не понравится ни одному.
Именно так работали команды разработки в 2000-х годах до внедрения DevOps технологии, когда самой популярной методологией была водопадная модель (Waterfall). При таком подходе разработка продукта была линейной и последовательной, вследствие чего уйма времени разработчиков уходила на разработку больших фрагментов кода, а тестировщики тратили больше времени на проверку этого кода.
Каждый отдел мог сидеть на разных этажах, а результаты работы скидывать друг другу без объяснений. Нетрудно догадаться, что это сильно тормозило выпуск готового продукта, а что важнее вызывало множество конфликтов на почве недопониманий.
Без методологии разработки DevOps тестировщики говорили: «У нас отличные тесты, это код нерабочий». Разработчики отвечали: «На наших компьютерах код работает, это тесты неправильные». А затем все дружно говорили: «Это не наша зона ответственности», и перед релизом вставала огромная преграда, а что с ней делать никто не понимал. Конечно, все разногласия рано или поздно решаются, но в разработке программного обеспечения, когда на кону качество продукта и мнение заказчика, лучше решать проблемы сразу.
С появлением методологии Agile (вдохновителя принципов девопс) отрасль перешла к итеративной разработке ПО с более частыми релизами. Заработавшие в этой модели непрерывная интеграция (Continuous Integration, CI) и непрерывная поставка (Continuous Delivery, CD) позволили быстрее и чаще выпускать ПО для пользователей.
Главная суть методологии DevOps вытекает из Agile, но с тем уточнением, что все отделы разработки должны непрерывно и прозрачно обсуждать друг с другом свои действия и планы на будущее. Только при таком подходе команда сможет выпустить качественный продукт за рекордно короткое время.
DevOps практики
Конечно, если бы проблема заключалась только в разногласиях, уместнее было бы позвать корпоративного психолога и объяснить взрослым людям как взаимодействовать друг с другом. Однако, этапы DevOps включают в себя не только работу над коммуникацией:
- Непрерывная интеграция (CI)
Раньше разработчики, обновляя код, вручную собирали и тестировали корректность. С развитием методологии DevOps обновлённые части кода начали загружаться в центральный репозиторий (общее онлайн хранилище). Там проходит автоматическая сборка и тестирование кода.
Таким образом процесс разработки значительно ускорился, а выявление ошибок поднялось в качестве, вследствие чего до тестировщика доходит лишь малая их часть.
- Непрерывная поставка и развёртывание (CD)
CD – это, так называемое, продолжение CI. Здесь все изменения кода автоматически развёртываются в тестовой среде. После этого развёрнутый код прогоняют через автоматические тесты, и запускается развёртывание в производственной среде.
Только неудачный тест может предотвратить запуск обновления сборки. Так разработчики могут быстрее обнаруживать и исправлять ошибки. CI/CD практики лежат в основах DevOps и выполняются последовательно и, чаще всего, не практикуются друг без друга.
- Непрерывное тестирование
В процессе развёртывание кода на сервере сборки запускаются автоматические модульные тесты. Они заранее прописываются тестировщиком и учитывают контекст проводимых работ, поэтому тестировщику необходимо заранее обсуждать с разработчиками все детали и планировать тесты.
Модульные тесты, в отличие от внешних (функциональных) позволяют взглянуть на корректность кода изнутри. Только после успешного прохождения модульных тестов код будет развёрнут в среде контроля качества.
- Непрерывное наблюдение
В число важных практик DevOps разработки входит также постоянный мониторинг качества производительности, безопасности и соответствия требованиям.
Непрерывное наблюдение за основными метриками позволит отслеживать состояние продукта от концепции до релиза и предотвращать ошибки на ранних этапах.
- Инфраструктура как код
Ранее вся инфраструктура продукта (виртуальные машины, балансировщики нагрузки и т.д.) настраивались и управлялись вручную. Однако в последнее время становится популярным настраивать инфраструктуру программно, именно это и подразумевает под собой модель “Инфраструктура как код”.
- Микросервисы
Микросервисная архитектура позволяет разбить продукт на множество небольших серверов или компонентов, каждый их которых отвечает за отдельный набор функций.
Такой подход обеспечивает независимое управление ресурсами в рамках отдельных компонентов и повышает доступность системы, так как ни один из микросервисов не влияет на другой. Создание новых компонентов также упрощается в силу независимости их друг от друга.
Ключевые преимущества DevOps
В наше время многие IT-компании и компании с IT-отделом приняли методологию DevOps за стандарт и заметили значительные улучшения во всех аспектах разработки:
- Налаживание связей
Слаженная команда = качественный результат. А цель технологии девопс как раз таки заключается в установлении доверительных и понимающих отношений в команде разработки.
- Повышение производительности
Автоматизация основных процессов разработки даёт значительный буст к производительности всей команды, вследствие чего проект не только закрывается в срок, но и радует заказчика и пользователей гарантией качества.
- Увеличение скорости выпуска ПО
Вследствие слаженной работы и высокой производительности значительно ускоряется и время разработки. Чем больше процессов автоматизирует инженер по DevOps, тем меньше времени уйдёт на саму разработку и выявление ошибок.
- Повышение лояльности клиентов
В разработке ПО на первом месте всегда стоят потребности пользователей, а следование DevOps разработке обеспечивает клиентов не только производительным и надёжным продуктом, но и уникальными решениями, которые рождаются в команде, где каждое мнение должно быть услышано.
- Гарантии качества и работоспособности
Автоматические тесты и прозрачная коммуникация в команде позитивно влияют на качество и надёжность продукта, так как если каждый участник на 100% уверен в том, чего от него хотят и как его действия повлияют на чужую работу, трудности и ошибки будут стремиться к нулю.
Настало время разобраться кто стоит за внедрением методологии DevOps в компаниях и регулирует её корректное исполнение.
Как мы жили до DevOps разработки?
Перед тем, как разобрать основные задачи инженера по DevOps пойдём от обратного и уточним как команды справлялись без него. Разработка ПО, как известно никогда не была и до сих пор не стала лёгким и быстрым процессом. Между командой разработки и заказчиком зачастую стоит стена из непонимания того, какие процессы необходимы и сколько времени и денег придётся на них потратить.
Однако, разногласия и недопонимания между заказчиком и командой всегда активно решались с помощью менеджера проектов или системного аналитика. Но что делать, когда стены начинают вырастать в самой команде?
Так, например, разработчики, тестировщики и сисадмины до внедрения методологии разработки DevOps часто не понимали или не хотели понять деятельность друг друга. Разработчики не знали, с какими проблемами сталкиваются тестировщики и сисадмины: тестировщики ругали разработчиков за то, что их код неудобно тестировать; сисадмины ругали всех — потому что исправление ошибок требовало времени, а выпустить обновление надо было ещё вчера.
Всё это было серьёзной проблемой пока на арену разработки не вышли они – специалисты по системной интеграции!
Чем занимается DevOps инженер?
И снова пофантазируем, представьте, несколько друзей собрались приготовить ужин: один нарезает салат, другой запекает мясо, третий варит гарнир. Задачи просты и понятны, однако в каждом процессе есть свои тонкости: первый не посолил салат, потому что ему сказали просто нарезать, второй не понял на сколько градусов включить духовку, третий не знал как долго нужно варить. В итоге все разругались и ушли домой голодные.
А теперь представим, что в самом начале они позвали четвёртого друга Диму и сказали, что он должен проштудировать рецепты и проследить за тем, чтобы всё было в порядке. В итоге Дима всем сказал чёткое время, заранее разогрел духовку, а салат не просто посолил, но и вкусную заправку придумал.
Так вот в реальном проекте Дима – тот самый специалист по интеграции прикладных решений (DevOps-инженер). Он внимательно следит за производительностью, эффективностью и корректностью работы. На практике задачи девопсера разнятся не просто от компании к компании, но и от команды к команде. Происходит это потому что принципы DevOps, как мы уже выяснили, были созданы, чтобы автоматизировать и упростить слабые места в разработке, но, как часто бывает, слабые места у всех разные.
Мы рассмотрим две крайности девопс программистов, а затем объединим их и выделим основные задачи, с которыми им приходится сталкиваться в большинстве проектов:
- Первая крайность – “И швец, и жнец…”
Всевидящий специалист с восемью руками и четырьмя ногами. Он сделает всё, даже если в его обязанности это не входит, такие ребята редко, но всё же встречаются. Если для вас это звучит пугающе схоже с крепостными крестьянами, не переживайте. Такой инженер по DevOps чаще всего ценит свою работу как раз за разнообразие задач и отсутствие монотонного перекладывания бумаг.
- Вторая крайность – Узконаправленный девопсер
По другую сторону баррикад спокойно работает узконаправленный девопсер, ему этот мир уже абсолютно понятен. Скорее всего это опытный DevOps разработчик, который успел получить опыт во всём и остановился на двух-трёх задачах, которые ему приносят удовольствие, а команде пользу.
А теперь выделим золотую середину и изучим самые распространённые задачи девопса:
- Архитектура и масштабирование
На этапе планирования помогает решить какая у системы будет архитектура и какие средства масштабирования стоит применить.
- Работоспособность
В ходе разработки, тестирования и внедрения следит за работоспособностью всех сред и инструментов разработки.
- Автоматизация
Главная цель методологии разработки DevOps – ускорить процесс разработки, поэтому девопсер по возможности и необходимости автоматизирует некоторые процессы разработки. Самый распространённый пример – автоматизация тестирования.
- Коммуникация
Без налаженной коммуникации в команде ничего не выйдет, поэтому девопсер, по всем канонам методологии, старается наладить взаимодействие участников и разрешить возникающие проблемы.
- Организация
Организация и коммуникация идут в комплекте, именно поэтому в задачи DevOps инженера входят организация процессов разработки, тестирования и внедрения и планирование их взаимодействия, опережая возможные трудности.
Суперсилы классного DevOps-разработчика
Как и у любого другого специалиста, DevOps навыки делятся на hard (практические навыки) и soft (черты характера и личностные качества). К обязанностям девопс инженера относятся:
- Программирование – или, как минимум, чёткое понимание девопс программистом задач и навыков разработчика, а также умение разобраться в коде и его работоспособности.
- Контейнеризация и её поддержка – ПО для автоматического развёртывания и управления приложениями в средах с поддержкой контейнеризации
- Настройка инфраструктуры разработки
- Мониторинг работоспособности серверов и другой аппаратуры
- Автоматизация – а точнее умение инженера по DevOps определить что именно необходимо автоматизировать и каким способом.
- Настройка CI/CD – конвейера, который позволяет непрерывно вносить в код небольшие изменения и быстро запускать приложения на боевых серверах
Soft-скиллы DevOps разработчика складываются ото всех участников команды понемногу: он должен обладать аналитическим складом ума и системным мышлением, способностями к организации и управлению, умением презентовать свои решения и подойти к возникающим трудностям с разных сторон.
Разработка программного обеспечения от 66 Бит
Всего за 10 минут вы узнали что такое методология DevOps, почему она необходима в команде разработки и чем занимается DevOps инженер. А за такой же быстрой и качественной разработкой ПО советуем обращаться в 66 Бит! Наши специалисты обладают не только большим опытом, но и умением работать быстро и слаженно для лучшего результата. Подробнее читайте на сайте!