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

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

Вместе с Павлом Селивановым, ведущим DevOps-инженером Mail.ru Cloud Solutions, и другими экспертами разберем, что это за подход, какие проблемы решает DevOps и какие инструменты нужны для его внедрения и реализации.

Что такое DevOps простыми словами

Классический процесс разработки состоит из трех разделенных этапов:

  • сначала команда программистов — Dev — пишет код и делает его сборку;

  • потом команда тестировщиков — QA/QC — берет код от программистов и тестирует его;

  • наконец, команда администраторов — Ops — устанавливает протестированный код на «боевые» серверы, то есть преподносит его пользователям.

Проблема этого подхода в том, что все три этапа плохо связаны между собой:

  • программисты пишут код, и что с ним происходит дальше, их не волнует;

  • тестировщики могут три дня тестировать не ту версию кода, потому что новую забыли передать;

  • администраторы устанавливают код на «боевые» серверы, а ничего не работает: конфигурация там не такая, как у тестировщиков.

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

Плюс задачи отправляют и принимают живые люди с ограниченной пропускной способностью. И может возникнуть «бутылочное горлышко» — в одном отделе будут бесконечно скапливаться задачи. Например, если тестировщики не успевают тестировать, то и программисты, и администраторы будут сидеть без работы.

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

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

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

Концепция DevOps — это не просто философия, но и технологии. Мало сказать: «Мы работаем как одна команда» — нужно еще и обеспечить инструменты для такой совместной работы. Обычно для настройки таких инструментов и процессов нанимают специального человека — DevOps-инженера.

«Пример из практики: в 2018 году одна из небольших компаний рынка рекламы решила заказать разработку CRM-системы, адаптированной под свои бизнес-процессы. Сотрудники составили требования, выбрали подрядчика. Разработка и внедрение заняли около года, и за это время бизнес-процессы изменились. Свежеразработанную систему потребовалось переработать, компания снова обратилась к подрядчику — и новая разработка заняла еще полгода. Если бы подрядчик использовал DevOps, CRM-систему запустили бы уже через полгода, продукт бы не пришлось перерабатывать и компания сэкономила бы минимум 20% от бюджета на разработку».

Михаил Толкачев, IT-консультант, архитектор комплексных IT-проектов

Как происходит разработка по подходу DevOps

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

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

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

  2. Разработка

    Команда, обычно под руководством DevOps-инженера, создает среду и конвейер C/CD, в которых будет происходить разработка продуктов. Для этого пишется ряд скриптов и систем для версирования, управления проектом, мониторинга, а также настраиваются кластеры для разработки, тестирования и продакшена. Этим, как правило, занимаются администраторы и тестировщики.

    Если в компании прижилась культура DevOps, все эти системы будут уже готовы — их нужно только адаптировать под новый продукт.

    «У нас DevOps-инженеры на каждом шаге помогают разработчикам и тестировщикам решать конкретные технические задачи: подготовить проект в GitLab для хранения кода, составить тестовые конфигурации, опубликовать сборку на сервере, написать конкретный сценарий. Даже если у команды нет опыта и знаний в процессах автоматизации, они быстро их освоят под руководством DevOps-инженера».

    Тимур Гильмуллин, заместитель руководителя отдела технологий и процессов разработки, Positive Technologies

     

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

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

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

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

    Использование DevOps в разы сократило время на рутинные действия по тестированию и развертыванию, что позволило экономить деньги и выпускать продукты быстрее».

    Антон Лыткин, технический директор, Work Solutions

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

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

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

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

    Разработчики, тестировщики и администраторы работают на виртуальных машинах или серверах с разной конфигурацией. Если провести тестирование (даже автоматическое) на конкретной машине, то на другой код может не заработать. Чтобы избежать этой проблемы, нужна контейнеризация — запуск и тестирование приложения в определенной фиксированной среде. Инструменты DevOps позволяют автоматически запускать такие среды, менять их конфигурации, проводить тесты и доставлять контейнеры с готовым протестированным кодом на рабочие серверы.

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

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

    Чтобы эта система работала, важно тщательное тестирование. Если плохо протестированное приложение автоматически развернется, это может привести к серьезным финансовым потерям.

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

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

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

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

Какие проблемы разработки помогает решать внедрение DevOps

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

«Согласно исследованию State of DevOps Report, в 2015 году IT-компании, работающие по методологии DevOps, развертывали приложения в среднем в 30 раз чаще, чем работающие по классической схеме. В отчете за 2019 год классические компании вообще в расчет не брали: сравнивали компании с высоким и низким уровнем DevOps-культуры. И компании с высоким уровнем развертывали приложения в 208 раз чаще и в 106 раз быстрее проходили путь от завершения кода программистами до релиза».

Михаил Толкачев, IT-консультант, архитектор комплексных IT-проектов

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

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

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

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

Согласно отчету State of DevOps 2019, компании с высоким уровнем DevOps-культуры в 2604 раза быстрее восстанавливают работу приложения после проблем и ошибок и в 7 раз реже сталкиваются с отказами и ошибками при развертывании.

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

Эффективное использование DevOps позволяет решить эту проблему. Разработка занимает меньше часов, а вся рутина оказывается автоматизирована — в итоге на нее требуется меньше человеческих ресурсов и меньше денег.

«DevOps-инженеры уменьшают общую стоимость и издержки производства ПО за счет того, что создают шаблонные, типовые, надежные и проверенные решения, а потом доносят их до всех продуктовых команд».

Тимур Гильмуллин, заместитель руководителя отдела технологий и процессов разработки, Positive Technologies

Какие инструменты нужны, чтобы внедрить DevOps и эффективно использовать подход

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

Также в практике DevOps часто используют облачные платформы (PaaS) — готовые решения для хранения данных, разработки, контейнеризации. Они позволяют разворачивать и тестировать новые инструменты, не тратя время на долгую настройку.

Например, на платформе Mail.ru Cloud Solutions есть много таких решений: базы данных, системы контейнеризации и другие PaaS для оптимизации нагрузки и автоматизации работы. Они помогут вам внедрить DevOps-подход в процессы разработки.

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

CI/CD-системы. Например, GitLab, Jenkins и Bamboo. Они обеспечивают работу скриптов, автоматизацию и мгновенную обратную связь.

Инструменты для управления инфраструктурой как кодом (IaC). Например, Terraform и Ansible. Позволяют автоматизировать развертывание инфраструктуры и управлять приложениями в облаке.

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

Mail.ru Cloud Solutions предлагает Kubernetes в облаке — готовую платформу для управления вашими контейнерами. С ней вы сможете запускать и останавливать кластеры в один клик, а также подключить автомасштабирование — автоматически запускать новые серверы при росте нагрузки на приложение.

Системы мониторинга. Например, Sensu и Prometheus. Они автоматически проверяют состояние серверов, контейнеров, приложений и устройств, собирают логи и отправляют оповещения о проблемах и ошибках.

Кратко: самое главное об основах DevOps

  1. Философия DevOps — это подход к разработке, при котором код автоматически и непрерывно переходит от разработчиков к тестировщикам, а затем разворачивается на «боевых» серверах. Все занятые в разработке работают как единая команда, а не перебрасывают друг другу задачи и ответственность за результат.
  2. DevOps помогает ускорить релизы, избежать ошибок при тестировании и запуске приложений, предотвратить проблемы с обновлениями и снизить расходы на разработку.
  3. Разработка по DevOps происходит в 6 этапов: проектирование, написание кода, запуск конвейера CI/CD, непрерывное тестирование, непрерывное развертывание и непрерывный мониторинг. Все эти этапы идут не друг за другом, а параллельно.
  4. Для работы по технологии DevOps нужно много специальных инструментов автоматизации: облачные технологии, системы контроля версий, платформы управления инфраструктурой. Их настройкой обычно занимаются DevOps-инженеры.