Разработка приложений: системы и инструментарий
Разработка приложений — это основа цифровизации бизнеса, без которой сейчас, как всем уже понятно, никуда. Новые продукты появляются и обновляются постоянно, и для каждого бизнеса нужно что-то уникальное и своевремменное. Рассказываем, какие средства автоматизации разработки приложений позволяют достичь гибкости и адаптивности решений, максимально сократить интервал time2market — словом, сделать процесс быстрее и эффективнее.
Содержание статьи:
DevOps-методики для разработки и тестирования: в стремлении к лучшему
Направление DevOps на рынке IT-профессий сейчас более чем востребовано. Между тем не все до конца понимают сущность этой методологии. Ясно, что DevOps помогает облегчить и улучшить процесс разработки приложений, но каким образом и за счет чего? Попробуем разобраться.
Для этого представим себе типичный сценарий создания и внедрения IT-продукта. Над ним трудится команды разработчиков, тестировщиков и системных инженеров. Их роли четко распределены, каждый занимается своим делом. Разработчики пишут код, тестировщики его проверяют, системные инженеры запускают приложение в продакшн и следят за тем, чтобы оно стабильно функционировало.
Это идеальная картинка, в реальности же все обычно происходит иначе. Разработчики видят, что код запускается, и смело переходят к доставке в продакшн. И вот на стадии запуска выясняется, что приложение не работает. Команда эксплуатации заявляет, что всему виной ошибки в коде, следовательно, исправлять их должны разработчики. И вместо публикации релиза продукта начинается конфликт с выяснением вопроса, кто несет ответственность за проблему. А в итоге страдает конечный потребитель, который хочет только одного — как можно быстрее получить работающее приложение.
Конфликт интересов между разработкой и сопровождением возникает из-за того, что, как ни парадоксально, каждая команда преследует свои цели. Между ними не всегда слаженное взаимодействие, потому что процесс создания приложения представляет собой последовательность отдельных шагов. Точнее, так было до появления DevOps.
Итак, что такое DevOps-инструменты и для чего они нужны? Смысл их применения — обеспечить эффективное взаимодействие между командами разработки и эксплуатации (сам термин происходит из сокращения слов Development и Operations). Можно сказать, что DevOps — это философия улучшения. Ее ключевая идея состоит в том, что все участники проекта работают совместно ради одной общей цели — ускорить вывод на рынок качественного цифрового продукта.
Достигается это, во-первых, тем, что процесс разработки приложений становится непрерывным: разработка, тестирование и развертывание осуществляются одновременно, а не последовательно, что позволяет экономить время. Во-вторых, DevOps предполагает максимальную степень автоматизации операций.
DevOps — это не отдельный инструмент или технология, а набор практик, объединяющих разработку и развертывание. Суть методологии в том, чтобы ускорить интеграцию и доставку ПО, улучшить взаимодействие между членами команды, избежать ошибок и повысить качество цифровых продуктов.[1]
Какие практики существуют в рамках DevOps? Их можно классифицировать в соответствии с задачами, решаемыми в процессе создания и публикации ПО. В рамках каждой практики используется определенный набор инструментов DevOps, которые легко интегрируются между собой.
Управление исходным кодом
Эти инструменты DevOps помогают контролировать версии, отслеживать изменения исходного кода и вести их историю. Примеры: GitLab, GitHub, Bitbucket.
Сборка
DevOps стремится полностью автоматизировать процесс получения цифрового продукта из исходного кода. Инструменты сборки решают задачи компилирования, компоновки, тестирования и запуска приложений. Примеры: Ant, Maven, Gradle.
Управление конфигурацией
Набор инструментов, позволяющих строить и изменять инфраструктуру на серверах. В основном это ПО с открытым исходным кодом, что дает программистам компаний возможность создавать собственные решения. Примеры инструментов управления конфигурацией: Ansible, Chef, Puppet, SaltStack, Terraform.
Непрерывная интеграция и доставка
CI/CD — это одна из ключевых практик DevOps, которую всегда внедряют в процесс разработки приложений. Ее цель — предотвращать проблемы, возникающие в результате внесений изменений в код. Основной инструмент CI/CD — GitLab.
Тестирование
Программное обеспечение позволяет писать и запускать сценарии тестирования, чтобы автоматизировать этот процесс. Популярные инструменты — TestNG, Selenium, JUnit.
Непрерывный мониторинг
Существует набор инструментов для постоянного контроля различных параметров работы приложений, серверов, сервисов. Например, Prometheus снимает полный перечень метрик, а Grafana позволяет формировать дашборды и прочие визуальные инструменты для мониторинга стабильности и работоспособности сервисов и инфраструктуры.
Контейнеризация и оркестрация
Контейнеры позволяют быстро запускать приложения в неизменяемой среде. Благодаря горизонтальному масштабированию без дополнительных манипуляций они легко переносятся в любую среду. Применение данной технологии также помогает экономить память и ресурсы процессора. Самый популярный инструмент контейнеризации — Docker. Для удобства управления большим количеством контейнеров служат системы оркестрации — такие, как Kubernetes.
На основе практик и инструментов DevOps строятся универсальные платформы — системы разработки приложений, которые позволяют создавать программные продукты для любых областей применения.
CI/CD — непрерывная интеграция в разработке
Мы уже упоминали о непрерывной интеграции как об одной из ведущих практик DevOps. Эта тема сейчас настолько актуальна, что о ней стоит рассказать подробнее.
Итак, что такое CI/CD? Термин образован первыми буквами слов Continuous Integration («непрерывная интеграция») и Continuous Delivery («непрерывная доставка»). Проще говоря, это система методов, обеспечивающих автоматическую разработку, тестирование кода и его развертывание.
Программный продукт для бизнеса динамичен: в процессе его использования постоянно возникают новые задачи, которые требуют внесения изменений в код. При обычном подходе вывод на рынок приложения с обновленным функционалом занимает несколько месяцев. Применение методологии CI/CD позволяет сократить этот процесс от нескольких недель или дней до нескольких часов и даже минут. Еще одно весомое преимущество системы непрерывной интеграции — повышение качества продукта: все возможные проблемы выявляются и устраняются на ранних стадиях[2].
CI/CD — поэтапный процесс. Сначала разработчики пишут код, каждый — свою часть. После первичного ручного тестирования модули интегрируются в основную ветку проекта. Система контроля версий позволяет вовремя обнаруживать ошибки и исправлять их без потери большей части работоспособного кода. Далее начинается автоматическая сборка и тестирование.
Комментарий эксперта
Преимущества CI/CD систем очевидны для каждого звена команды разработки. «Благодаря повсеместному внедрению CI/CD автотесты также встраиваются в этот процесс», — говорит Алексей Малков, руководитель тестировщиков в компании «Севентек». — «Таким образом, каждое изменение проходит автоматизированное тестирование после каждой сборки продукта. Отчеты о таких проверках также автоматически собираются в подсистеме мониторинга результатов.»
После успешной проверки и внесения необходимых исправлений рабочая версия развертывается на продакшн-сервере. С этого момента проект превращается в продукт, и конечный пользователь может ознакомиться с его возможностями, а затем, если его все устроит, приступить к работе с приложением. По мере формирования клиентских запросов составляется план новых изменений, и цикл CI/CD повторяется.
Методология быстрой разработки приложений чрезвычайно востребована, потому что скорость выпуска цифровых продуктов и их качество напрямую влияют на конкурентоспособность. Передовые технологические компании используют DevOps и его неотъемлемую часть CI/CD для повышения эффективности работы. Современные принципы и методы разработки программных приложений позволяют максимально сократить период time2market и тем самым на несколько шагов опередить конкурентов.