Реализация методологии "Continuous Integration" в разработке веб-приложения

Тенденции ускорения цикла разработки: кодирование – тестирование – сборка – развертывание в разработке веб-приложений и программного обеспечения. Применение методологии "Continuous Integration" для автоматизированного выполнения сборки и развертывания.

Рубрика Программирование, компьютеры и кибернетика
Вид статья
Язык русский
Дата добавления 10.12.2016
Размер файла 183,2 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Пензенский государственный технологический университет

РЕАЛИЗАЦИЯ МЕТОДОЛОГИИ "CONTINUOUS INTEGRATION" В РАЗРАБОТКЕ ВЕБ-ПРИЛОЖЕНИЯ

Чинков М.Ю.

г. Пенза, Россия

Аннотация

В статье рассматривается методология "Continuous Integration", её роль в разработке программного обеспечения (в частности веб-приложений), а также показан пример реализации данной методологии на практике.

Ключевые слова: Continuous Integration, сборка, развертывание, Jenkins, веб-приложение, разработка программного обеспечения.

This article considers "Continuous Integration" methodology, its role in software development (web-applications in particular) and practical implementation.

Keywords: Continuous Integration, build, deployment, Jenkins, web-application, software development.

Одними из наиболее важных компонентов в разработке программного обеспечения являются сборка и развертывание продукта. Сборка - процесс преобразования исходного кода проекта в упакованный запускаемый файл. Примером сборки может служить упаковывание Java-приложения в jar-файл для запуска на Java Virtual Machine (JVM). Развертыванием продукта является процесс переноса изменений в приложении с локальной среды разработчиков в среду эксплуатации (по другому данная среда описывается термином production). Обычно в процессе развертывание происходит доставка собранного проекта в специальный репозиторий и дальнейшее скачивание проекта вместе с его установкой и конфигурацией.

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

Данная проблема может быть решена посредством внедрения в процесс разработки методологии "Continuous Integration" (CI). "Continuous Integration" является практикой автоматизированного выполнения фаз сборки и развертывания неограниченное количество раз, стремясь к одинаковому результату и выполнению задач цикла. Понятие "Continuous Integration" было открыто в 1994 году американским инженером Гради Бучем в книге "Объектно-ориентированный анализ и проектирование". Этим термином Грэди Буч пытался объяснить, каким образом реализуются микро-процессы, формирующие цикл релиза программного продукта. Однако данная методология приобрела свою популярность только в середине 2000-х годов. Наиболее подробное объяснение методологии можно найти в статье британского программиста Мартина Фаулера "Continuous Integration", опубликованной в мае 2006 года. Именно тогда стали появляться консоли сборки, доступные через веб-интерфейс.

Методология "Continuous Integration" имеет конечную цель в виде построения максимально быстрого, повторяемого и надежного процесса внедрения изменений в программный продукт. В качестве рабочих микро-процессов рассматриваются коммит, тестирование, сборка, регистрация пакета и развертывание. Коммитом является изменение программного кода, зарегистрированного системой контроля версий и отправленное для проверки в интеграционное тестирование. Тестированием является процесс контроля качества продукта и его целостности. После процесса сборки, описанного в начале статьи, продукт проходит процедуру регистрации в виде отдельного атомарного релиза. Процесс непрерывной интеграции продукта завершается развертыванием на эксплуатируемой платформе (обычно это тестовый сервер). кодирование тестирование автоматизированный

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

Основной частью исследования роли методологии "Continuous Integration" и результатов ее внедрения является реализация описанных выше принципов на практике. Целевой инфраструктурой реализации является веб-приложение, основанное на облачных вычислениях и использующее сервисы провайдера Amazon Web Services в качестве внешних инструментов. Данное приложение состоит из двух частей: клиентской для отображения пользователям в веб-браузере и серверной, в которой реализуется бизнес-логика приложения и обработка клиентских запросов. Первоначальной проблемой в команде разработке являлось выделение большого количества времени на ручное выполнение сборки и развертывания приложений. Написанные скрипты сборки не решили проблему полностью, так как по-прежнему сохранялось необходимость в ручном контроле цикла. Реализация процесса непрерывной интеграции позволила разработчикам сконцентрироваться только на формировании логики работы программного кода и быстрому внесению изменений в логику приложения.

Для управления процессом непрерывной интеграции была установлена и сконфигурирована CI-консоль Jenkins, являющаяся бесплатным открыто распространяемым программным обеспечением. Каждый разработчик имеет доступ к Jenkins через веб-браузер, чтобы отследить результаты последней сборки, а также историю внедрения изменений. Continuous Integration процессы запускаются автоматически при регистрации изменений программного кода в git-репозитории (в терминологии это называется commit). Цикл внедрения изменений также завершается самостоятельно с выводом результатов сборки и развертывания в средства коммуникации, используемые в команде разработчиков. В данном случае непрерывная интеграция веб-приложения состоит из нескольких этапов. На рисунке 1 показано взаимодействие процессов Continuous Integration в релизном цикле целевого веб-приложения. Данную структуру часто описывают, таким термином, как "конвейер", что подразумевает под собой связанную цепочку процессов обработки данных. В данном случае целевыми данными является исходный код приложения.

Рисунок 1 - конвейерная структура Continuous Integration процессов

Ниже приводится описание этапов внедрения изменений:

1) Очистка артефактов предыдущего релиза. На данном этапе происходит удаление модулей, установленных в процессе сборки предыдущего релиза.

2) Синхронизация репозитория с исходным кодом приложения. Изменения, зарегистрированные в commit-е git-репозитория, интегрируются в копию репозитория на сборочном сервере.

3) Тестирование и сборка клиентской части приложения. После установки необходимых модулей через утилиту "bower" клиентское приложение происходит сборку утилитой "gulp" и дальнейшее интеграционное тестирование утилитой "mocha".

4) Тестирование и сборка серверной части приложения. После успешной компиляции клиентской части приложения Continuous Integration-конвейер переходит к аналогичной процедуре над серверной частью. Происходят те же самые процессы установки модулей, сборки и тестирования, что и в клиентской части. Исключением является тот факт установки зависимостей утилитой "npm".

5) Упаковка приложения. Происходит архивирование готового к запуску приложения в zip-архив для дальнейшего развертывания. После упаковки конечный архив регистрируется в репозитории пакетов приложения.

6) Настройка окружения эксплуатации. Параллельно упаковке и регистрации приложения происходит конфигурация программного окружения на целевом сервере посредством выполнения сценариев системы управления конфигурации Ansible и проверки идентичности аппаратных ресурсов системой Terraform.

7) Развертывание релиза. Зарегистрированный релиз проходит процедуру развертывания посредством выполнения Python-скрипта, вызывающего сервис CodeDeploy - продукт Amazon Web Services, выполняющий внесение изменений в приложение в облачной инфраструктуре.

8) Проверка работы приложения. После развертывания и старта новой версии приложения происходит простая проверка утилитой netcat, которая проверяет, слушает ли приложение 3000 порт (порт для интерпретатора Node.js по умолчанию) для обработки клиентских запросов. В случае успешной проверки процесс внедрения изменений можно считать пройденным.

Сразу по окончанию этапов сборки и развертывания автоматически формируется сообщение о результатах внедрение изменений. Впоследствии сообщение публикуется в интерфейсе коммуникации команды разработчиков. В данном случае средством коммуникации является общий чат Slack.

На рисунке 2 представлен пример цикла непрерывной интеграции изменений веб-приложения, запущенный в сборочной консоли Jenkins.

Рисунок 2 - процесс непрерывной интеграции веб-приложения в Jenkins

По окончанию внедрения описываемого подхода в процесс разработки появляется также возможность дополнительного совершенствования релизного цикла приложения. Основными средствами развития цикла являются методологии "Continuous Delivery" и "Continuous Deployment". Принцип "Continuous Delivery" подразумевает технику полноценного тестирования приложения, развернутого на тестовой платформе, характеристики которой аналогичны production-платформе. Фактически в процесс тестирования может входить приемочное пользовательское тестирование (UAT), тестирование производительности сервиса, нагрузочное тестирование, а также проверка внутренней безопасности. Подход "Continuous Deployment" заключается в автоматизированном обновлении сервиса, работающих в реальном режиме без остановки сервиса или с максимальной минимизацией его застоя. Данный подход рассматривает автоматический выход нового релиза при прохождении всех запланированных тестов. Каждая из описанных практик может быть описана как расширение методологии, стоящей ниже в иерархии.

Таким образом, в данной статье были рассмотрены такие ключевые фазы в разработке программного обеспечения (в частности веб-приложений), как сборка и развертывание. Были выделены наиболее актуальные проблемы, возникающие на практике выполнения данных фаз, а также было предложено решение в виде внедрения методологии "Continuous Integration" в процесс разработки. В заключении было описано практическое применение реализации данной методологии на примере веб-приложение, архитектура которого основана на облачных вычислениях.

Список литературы

1. Хамбл Д., Фарли Д. Непрерывное развертывание ПО. Автоматизация процессов сборки, тестирования и внедрения новых версий программ [Текст] // - Вильямс, 2011.

2. Limoncelli T. The Practice of Cloud System Administration: Designing and Operating Large Distributed Systems, Volume 2 [Текст] // - 2015. - С. 195-243.

3. Fowler M. Continuous Integration [Текст] // - 2006.

Размещено на Allbest.ru


Подобные документы

  • Современные методологические проблемы разработки и внедрения программного обеспечения ERP систем. Основные концептуальные подходы к методологии разработки и внедрения программного обеспечения. Исследование методологии ASAP: ее сильные и слабые стороны.

    дипломная работа [4,3 M], добавлен 29.04.2011

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

    статья [532,1 K], добавлен 10.12.2016

  • Требования к технологии проектирования программного обеспечения (ПО). Состав и описание стадий полного жизненного цикла ПО. Классификация моделей жизненного цикла ПО, их особенности. Методологии разработки ПО, приёмы экстремальный программирование.

    презентация [874,4 K], добавлен 19.09.2016

  • Понятие, сущность и структура жизненного цикла программного обеспечения, описание технологии его проектирования, разработки и сопровождения. Сущность и основные положения международного стандарта ISO/IEC 12207. Перечень основных принципов методологии RAD.

    реферат [39,3 K], добавлен 30.11.2010

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

    курсовая работа [974,0 K], добавлен 21.12.2016

  • Стадии разработки программного средства. Средства, методологии и методы его разработки. Оценка надежности и качества проекта. Обоснование необходимости разработки программы. Тестирование как процесс выполнения тестовой программы с намерением найти ошибки.

    презентация [57,0 K], добавлен 27.12.2013

  • Возможности среды программирования delphi при разработке приложения с визуальным интерфейсом. Разработка спецификации программного обеспечения и на ее основе кода программного продукта. Отладка программы "трассировкой", ее тестирование и оптимизация.

    курсовая работа [501,4 K], добавлен 07.12.2016

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

    дипломная работа [2,4 M], добавлен 24.08.2016

  • Обзор подходов к разработке музейных приложений с элементами дополненной реальности, формирование требований к ним. Выбор методов разработки приложения, разработка пользовательского интерфейса. Принципы тестирования. Реализация раздела "Распознавание".

    дипломная работа [2,8 M], добавлен 03.07.2017

  • Понятие технологии разработки программного обеспечения и модели жизненного цикла. Сущность объектно-ориентированного подхода. Строительные блоки, общие механизмы языка моделирования UML, диаграммы классов, состояний, взаимодействий и компонентов.

    курсовая работа [262,5 K], добавлен 10.07.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.