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

Город конференции:
  • Москва

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

В 2019 году ОС Linux на базе ядра Linux является одной из самых популярной ОС, так как обеспечивает максимальную полезность и эффективность использования вычислительного комплекса (ВК) и его ресурсов, защищает ВК от сбоев, отказов и хакерских атак. ОС Linux используется во многих крупных организациях, таких как Google, Amazon, IBM, на ее основе разрабатываются ядерные и космические проекты.

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

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

Ее основа: система контроля версий, сеть вычислительных комплексов, а так же инструментальная машина.

В данной статье система непрерывной интеграции рассматривается на примере разработки ОС на основе ядра Linux. Такой выбор объясняется несколькими причинами: аппаратно-независимая часть ядра ОС Linux делает ее переносимой на различные процессоры и платформы; аппаратно-зависимая часть ядра позволяет эффективно использовать аппаратные возможности.

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

Такой подход разработки способствовал появлению огромного количества версий ОС Linux для различных процессоров и платформ.

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

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

Система контроля версий (СКВ) — децентрализованная система, регистрирующая изменения в одном или нескольких файлах, позволяющая возвращаться к любой из версий с возможностью просмотра информации о файле.

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

Наиболее популярной и удобной СКВ является система Git. Это распределённая система контроля версиями, при этом можно условно выделить центральный репозиторий: пользователи периодически синхронизируют свои локальные репозитории с центральным и работают непосредственно со своей локальной копией.

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

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

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

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

ATA over Ethernet (AoE) — это сетевой низкоуровневый протокол, зарегистрированный IEEE как Ethernet-протокол номер 0x88a2.

AoE полагается не на TCP/IP, а на возможности современных коммутаторов, у которых не бывает коллизий, есть возможность управления потоком и постоянно растёт производительность. В локальной сети сохраняется последовательность пакетов, а также для каждого пакета сетевым оборудованием вычисляется контрольная сумма.

В каждом пакете протокола AoE находится команда для ATA-диска или ответ от ATA-диска. Драйвер AoE в ядре Linux выполняется AoE и делает диск доступным как обычное блочное устройство. Драйвер может ретранслировать пакеты, так что AoE-устройство выглядит для остального ядра как обычный диск.

Для разработки СНИ, следует понять, что такое непрерывная интеграция и принципы ее работы.

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

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

Ниже представлена схема, которая является примером системы непрерывной интеграции, где x86- 64 - инструментальная машина для сборки исходных текстов ядра ОС, ВК «Эльбрус-401 PC» - комплекс, на котором будет запущено собранное ядро ОС.



Программа-сценарий расположена на инструментальной машине x86-64. Машина соединена с сетевым фильтром, ВК «Эльбрус-401 PC» и Git сервером, где подключение к ВК «Эльбрус-401 PC» и Git серверу выполняется через коммутатор. ВК «Эльбрус-401 PC» подключается к сетевому фильтру.

Передача данных между ВК «Эльбрус-401 PC» и инструментальной машиной x86-64 выполняется с помощью сетевого протокола ATA over Ethernet, который обеспечивает надежную передачу данных без коллизий.

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

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

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

 

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

 

1.   Даймонд Д., Торвальдс Л. Автобиография «Just for Fun: Рассказ нечаянного революционера» // издательство «Эксмо-Пресс», Москва 2002 г. Перевод с английского: Наталья Шахова.

2.   Бовет Д. Книга «Ядро Linux», 3-е издание // издательство «БХВ-Петербург», Санкт-Петербург 2007 г. Перевод с английского: Бовет Д., М. Чезати.

3.   Кофлер М. Книга «Linux. Установка, настройка, администрирование» // издательство «Питер», Санкт-Петербург 2014 г. Перевод с немецкого: О. Сивченко.