LeadStartup
Получите бесплатно — все материалы с наших курсов
Тренинги, Курсы, Обучение — Agile, Scrum, OKR
Тренинги, Курсы, Обучение — Agile, Scrum, OKR
Тренинги, Курсы, Обучение — Agile, Scrum, OKR
Виктория Щепина
Виктория Щепина
Продакт–менеджер

Исследуйте, как DevOps трансформирует IT-индустрию с помощью лучших практик и инструментов для улучшения процессов разработки и управления операциями.

Необходимо для автоматизации процессов разработки, тестирования и развертывания ПО

Что такое DevOps метод в разработке?

Development and Operations (DevOps) – это метод управления разработкой, который позволяет объединить усилия программистов и других членов команды. В традиционном подходе команда разделяется на группы, которые практически не взаимодействуют между собой. DevOps наоборот использует такие методы и инструменты, которые объединяют команду и побуждают ее участников поддерживать постоянную коммуникацию.

Считается, что данный подход сформировался примерно в 2009 году, когда IT–комьюнити пришли к выводу, что классические способы разработки устарели и пора больше вовлекать в процесс других участников проекта. Таким образом, предполагалось улучшить качество продукта и сделать его более эффективным и конкурентоспособным.

Модель управления имеет вертикальное, последовательное строение. Сначала определяются требования к продукту. В этом процессе принимают участие разные члены команды, так как они видят различные аспекты проекта по–своему. Тестировщики изучают программу с точки зрения пользователя, поэтому могут оценить, требуется ли реализация той функции, которую запрашивает заказчик. Дизайнеры также оценивают этот аспект, но с точки зрения удобства и эстетичности интерфейса. Они могут подсказать, как с помощью средств визуализации можно побудить юзеров выполнить целевое действие. Маркетологи помогут с решением бизнес–целей. В совокупности вся команда может дать больше, чем только разработчики.

Когда требования к продукту сформированы и согласованы со всеми заинтересованными лицами, наступает этап разработки. Здесь опять же могут быть задействованы не только программисты, но и другие участники проекта, например, менеджеры продукта. Он будет проверять, соответствует ли реализованная функция тем запросам, которые были обозначены ранее.

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

В завершении цикла отдел эксплуатации загружает готовый проект на рабочие машины и запускает его.

Какие преимущества дает DevOps?

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

  • DevOps стремится к постоянному улучшению программного продукта. Этот процесс не заканчивается даже после реализации проекта на рынке.

  • Цикл разработки делится на короткие итерации, в конце каждой из них код проходит проверку. Это значит, что на выходе получается более качественный продукт. Все ошибки и узкие места были найдены своевременно, они не успели стать критическими и серьезно повлиять на производительность.

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

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

  • Данный подход имеет набор инструментов, благодаря которым можно исследовать исходный код и находить в нем уязвимости. Это повышает безопасность продукта и делает его более надежным для бизнеса и пользователей.

Принципы DevOps

Каждая методология управления разработкой строится на каких–то базовых принципах. В DevOps они основаны на модели CAMS, которую сформировали Дэймон Эдвардс и Джон Уиллис в 2010 году. Они вывели идею, что данный подход развивается в трех направлениях. Первое из них — это люди, затем идут процессы и инструменты. Со временем модель CAMS была дополнена и стала называться CALMS.

C – Culture, культура.

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

В рамках культуры DevOps показывает всем участникам проекта, как работают остальные, чтобы оптимизировать процессы, улучшить качество разрабатываемого продукта и ускорить его выход на рынок.

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

A – Automation, автоматизация.

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

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

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

Также при автоматизации стоит учитывать навыки, знания и опыт специалистов, которые будут использовать эти инструменты. В некоторых случаях стоит заложить время и бюджет на их обучение.

L – Lean, бережливость.

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

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

M – Measurement, измерения.

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

  • Следить за уровнем производительности на протяжении всего цикла разработки программного продукта.

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

  • Проводить анализ обнаруженных ошибок, чтобы понять, каким образом можно снизить их влияние и постараться предотвратить их в будущем.

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

S – Sharing, распространение знаний.

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

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

Как проходит цикл разработки согласно методу DevOps?

Согласно подходу DevOps, процесс разработки программного продукта делится на следующие шесть этапов:

Формирование требований к проекту и проектированию.

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

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

После согласования всех требований и плана работы начинается разработка.

Разработка.

Под руководством DevOps–инженера или просто самого опытного программиста, команда создает рабочую среду и конвейер CI/CD. То есть, по сути, создает благоприятные условия для эффективной и безопасной разработки продукта.

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

Если компания только недавно перешла на метод DevOps, то все настройки осуществляются с нуля. Со временем для других проектов потребуется лишь адаптация.

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

Запуск конвейера CI/CD.

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

Непрерывное тестирование.

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

В случае, если будут выявлены баги и узкие места, то они не попадут в готовый продукт. Все обнаруженные недостатки отправятся на доработку, чтобы добиться соответствия требованиям. Если же изменения кода были незначительными, то продукт поступает на рабочие серверы.

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

Непрерывное развертывание.

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

Непрерывный мониторинг.

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

Стоит отметить, что в DevOps–методологии все этапы выполняются параллельно, а не последовательно. Это существенно сокращает цикл разработки и позволяет контролировать качество продукта на всем его жизненном пути.

Какие инструменты используются для внедрения DevOps?

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

Облачные технологии.

IaaS, инфраструктура как сервис – облачные серверы и хранилища, которые используют для гибкого управления мощностями.

Paas, платформа как услуга – это готовые решения, которые позволяют проводить разработку, контейнировать и хранить данные. Обычно эти платформы не требуют долгой настройки, поэтому дают возможность быстро разворачивать и тестировать продукты.

Системы версий.

Одним из возможных примеров служит Git, который позволяет управлять версиями исходного кода программы. В целом такие системы служат для отслеживания процесса разработки: кто, когда и как внес изменения в код. Также они дают возможность откатывать проект до рабочей версии, чтобы устранить серьезные проблемы.

CI/CD–системы.

GitLab – это специализированный DevOps инструмент с открытым исходным кодом. По сути, является системой управления репозиториями кода для Git с обширным функционалом.

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

Инструменты управления IaC.

Terraform – ПО, имеющее открытый исходный код и предназначенное для управления внешними ресурсами поставщиков услуг.

Ansible – система управления конфигурациями, написанная на Python. Ее используют для автоматизации процесса настройки и развертывания ПО.

Системы оркестрации контейнеров.

Docker Swarm – дает возможность объединять Docker–хосты в общий кластер, а также в автоматическом режиме управлять запуском и масштабированием контейнеров.

Kubernetes – открытое ПО, предназначенное для оркестровки контейнеризированных приложений. Также в условиях кластера проводит их развертывание, масштабирование и координацию.

Системы мониторинга.

Sensu – утилита для управления фреймворками, которая обеспечивает механизмы, нужные для сбора и статистики работы серверов.

Prometheus – база данных временных рядов, используемая для мониторинга серверов, баз данных, виртуальных машин и многого другого.

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