Телефон: +7 (383)-312-14-32

Статья опубликована в рамках: Научного журнала «Студенческий» № 7(135)

Рубрика журнала: Информационные технологии

Библиографическое описание:
Мустаев Р.Р. АВТОМАТИЗАЦИЯ ПРОЦЕССОВ СБОРКИ И РАЗВЕРТЫВАНИЯ ПРОГРАММНОГО ПРОДУКТА // Студенческий: электрон. научн. журн. 2021. № 7(135). URL: https://sibac.info/journal/student/135/204053 (дата обращения: 02.03.2021).

АВТОМАТИЗАЦИЯ ПРОЦЕССОВ СБОРКИ И РАЗВЕРТЫВАНИЯ ПРОГРАММНОГО ПРОДУКТА

Мустаев Рустем Рушанович

студент, кафедра автоматизированных систем управления, Уфимский государственный авиационный технический университет,

РФ, г. Уфа

AUTOMATION OF SOFTWARE’S BUILDING AND DEPLOYMENT

 

Rustem Mustaev

student, Department of automated control systems,  Ufa State Aviation Technical University,

Russia, Ufa

 

АННОТАЦИЯ

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

ABSTRACT

The article deals with tools and methods for organizing the software development process, with the help of which it facilitates the development and maintenance of programs on a production scale by automating the assembly and deployment processes. During the research, we examined such approaches to conducting software development as continuous integration and continuous deployment. In conclusion, a general model of the functioning of an automated system was formed, considering the use of modern technologies used in the development of programs.

 

Ключевые слова: разработка программ; автоматизированная сборка; автоматизированное развертывание, непрерывная интеграция, непрерывное развертывание, непрерывная доставка.

Keywords: software development; automated software’s building; continuous deployment, continuous integration, pipelines, continuous delivery.

 

ВВЕДЕНИЕ

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

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

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

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

Распределенная система управления версиями.

Первым шагом на пути к автоматизации является использование систем контроля версий.

Абсолютным лидером среди таких систем является «Git». Это развитый проект с активной поддержкой и открытым исходным кодом. «Git» применяется для управления версиями в рамках колоссального количества проектов по разработке ПО, как коммерческих, так и с открытым исходным кодом. Система используется множеством профессиональных разработчиков программного обеспечения. Она превосходно работает под управлением различных операционных систем и может применяться со множеством интегрированных сред разработки (IDE).

Основным преимуществом использования системы контроля версий является независимая разработка продукта несколькими людьми. Такая возможность предоставляется благодаря особой структуре хранения репозитория (всех исходных файлов ПО) и изменений, вносимых разработчиками [1].

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

Непрерывная интеграция.

Непрерывная интеграция — специализированная практика разработки программного обеспечения, при использовании которой от разработчиков требуется выкладывать код в центральном репозитории на регулярной основе — несколько раз в день. При этом каждое новое обновление кода сопровождается его проверкой на валидность – возможностью собрать из этого кода приложение без ошибок. Это важный этап, потому что в большинстве случаев обновленный код просто конфликтует с уже имеющейся конфигурацией [2].

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

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

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

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

Данный процесс очень схож с предыдущим. Непрерывное развертывание предназначено для выпуска приложения в тестовую или даже промышленную среду [5].

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

Непрерывное развёртывание не требует какого-либо дополнительного ручного тестирования, поскольку автоматическое тестирование выполняется на предшествующих этапах [6].

И непрерывная интеграция, и непрерывное развёртывание сильно зависят от готовности инфраструктуры и мониторинга приложений, чтобы как можно скорее обнаруживать любые проблемы, которые не были идентифицированы в циклах обратной связи на этапах тестирования, поскольку никакой ручной проверки не предусмотрено [7].

Инструменты разработки и автоматизации

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

Для оценки необходимости той или иной технологии необходимо определить набор функциональных потребностей, которых нам не хватает и которые мы получим.

Процесс традиционного развертывания приложения.

У нас есть запущенное приложение на каком-либо сервере. Для развертывания новой версии приложения требуется заменить существующие файлы на новые, а именно остановить работу системы, провести замену файлов, снова запустить систему с новым приложением. Все эти действия занимают определенное количество времени. В результате, в процессе обновления сервис остается недоступным. В случае возникновения непредвиденной ситуации в процессе обновления происходит потеря всей производственной среды [8].

Технология контейнеризации.

Контейнеризация – это форма виртуализации операционной системы, при которой приложения запускаются в изолированных пользовательских пространствах, называемых контейнерами, и все они используют одну и ту же общую операционную систему (ОС) [9].

Контейнеризированное приложение состоит из нескольких слоев:

В нижней части находится аппаратное обеспечение инфраструктуры: процессор, дисковое хранилище и сетевые интерфейсы. Уровнем выше расположены операционная система хоста и ее ядро. Последнее выступает «мостом» между программным обеспечением операционной системы и аппаратным обеспечением базовой системы. Движок контейнера и его гостевая ОС, характерные для используемой технологии контейнеризации, располагаются над операционной системой хоста. На самом верхнем уровне находятся файлы и библиотеки для каждого приложения и самих приложений, работающие в своих изолированных пользовательских пространствах (контейнерах) [10].

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

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

В данном случае мы уже имеем готовый образ, состоящий из подготовленных слоев, на основе которого мы готовы запустить контейнер – запустить приложение. Необходимыми действиями являются доставка нового образа до среды работы приложение, удаление старого контейнера и запуск нового. Разумеется, некоторое время, но гораздо меньшее (так как приложение уже собрано), сервис так же, как и в предыдущем случае остается недоступным [11].

Общая модель функционирования автоматизированной системы.

1. Разработчик добавляет изменения в систему контроля версий (Git).

2. Запускается процесс сборки приложения – образа, на основе которого будет запущен контейнер.

3. Образ отправляется в среду, на которой должно быть развернуто приложение.

4. На основе подготовленного образа запускается контейнер с функционирующим приложением.

• Функционально. Добавляется этап тестирования приложение после этапа сборки (2).

Azure Devops Server.

Azure DevOps Server (предыдущее название Team Foundation Server, или TFS) — это набор локально размещенных средств разработки программного обеспечения для совместной работы. Azure DevOps Server интегрируется с существующей интегрированной средой разработки или редактором.

В сервис встроена система контроля версий (Git), что избавляет от необходимости подключаться к другому ресурсу.

Процессы непрерывной интеграции и развертывания реализуются с помощью написания специальных инструкций в интуитивно-понятном yaml-формате.

Имеется бесплатная версия для небольших команд без необходимости установки на свои сервера [12].

Jenkins.

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

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

Работа осуществляется как с сервисом.

Необходимость настройки взаимодействия с Git.

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

Сценарии сборки и развертывания описываются в yaml-формате [13].

GitLab.

Веб-инструмент жизненного цикла программного обеспечения.

Имеет функционал непрерывной интеграции и развертывания (GitLab CI).

Dеб-инструмент жизненного цикла программного обеспечения с открытым исходным кодом, представляющий систему управления репозиториями кода для Git с собственной системой отслеживания ошибок, функционалом непрерывной интеграции и развертывания и другими функциями [14].

ЗАКЛЮЧЕНИЕ

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

 

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

  1. Loubser N. Software Engineering for Absolute Beginners. New York, New York, USA: Apress, 2021. 324 с.
  2. Continuous Integration // Martin Fowler. URL: http://martinfowler.com/ articles/continuousIntegration.html (дата обращения: 22.12.2020).
  3. Вичугова А.А. Автоматизация процесса разработки программного обеспечения: методы и средства // Прикладная информатика. 2016. Том 11. №3(63) С.65-69.
  4. Mojtaba Sh., Muhammad Ali B., Liming Z. Continuous Integration, Delivery and Deployment: A Systematic Review on Approaches, Tools, Challenges and Practices // IEEE Access. 2017. №PP(99).
  5. Дадыкин А. К., Ермолаев А. А. Современная методика организации процесса разработки программ // Системный анализ и прикладная информатика. 2013. №1-2. С.58-63.
  6. Кузьмина И. В., Фидельман В. Р. Разработка программного обеспечения сложных аппаратно-программных комплексов с использованием принципов непрерывной интеграции // Известия высших учебных заведений. Поволжский регион. Технические науки. 2012. №2(22). С.44-48.
  7. Кузьмина И. В., Семенова О. В. Совершенствование процессов интеграции и тестирования программного обеспечения аппаратно-программных комплексов // Вестник Нижегородского университета им. Н. И. Лобачевского. 2010. №5-2. С.393-395.
  8. PauM. Duvall, Stephen Matyas, Andrew Glover. Continuous Integration Improving Software Qualityand Reducing Risk // USA: «Addison-Wesley». 2007. 336c.
  9. Hlali A. The evolution of containerization and its impact on the Maghreb ports // Annals of Marine Science. 2019. № 3(1). C.1-5.
  10. Евстратов, В. В. Контейнеризация как современный способ виртуализации // Молодой ученый. 2020. № 49 (339). С. 7-9.
  11. Sacolick I. What is CI/CD? Continuous integration and continuous delivery explained // InfoWorld. 2020. C.1-4
  12. What is Azure DevOps? // docs.microsoft.com URL: https://docs.microsoft.com/ru-ru/azure/devops/user-guide/what-is-azure-devops? (дата обращения: 22.12.2020).
  13. Jenkins User Documentation // www.jenkins.io URL: https://www.jenkins.io/doc/ (дата обращения: 22.12.2020).
  14.  Continuous Integration (CI) with GitLab // https://about.gitlab.com URL: https://about.gitlab.com/stages-devops-lifecycle/continuous-integration/ (дата обращения: 22.12.2020).
  15. Маркелов А.А. Работа с контейнерами Docker // Системный администратор. 2017. №1-2 с.170-171.
  16. Евстратов, В. В. Оркестрация контейнеров на примере Kubernetes // Молодой ученый. 2020. № 51 (341). С. 11-13.

Оставить комментарий

Форма обратной связи о взаимодействии с сайтом