Этапы сборки проекта

В этом разделе рассматривается пример создания проекта с именем test1.

Настройка доступа к репозиторию

Взаимодействие с git-репозиторием может осуществляться через HTTP- и SSH-протоколы.

Для настройки доступа через SSH-протокол необходимо выполнить следующие действия:

  1. создать ключевую пару с помощью команды:
ssh-keygen
  1. добавить открытый ключ в разделе "Настройки → SSH-ключи" в меню Системы (рисунок 8);

Рисунок 8 – Добавление открытого ключа

  1. после добавления ключа работать с репозиторием через команду:
git clone ssh://<адрес_репозитория>

Клонирование репозитория проекта

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

Система использует git-репозитории для хранения и управления исходными файлами пакетов. Все изменения, необходимые для сборки (модификация .spec-файлов, обновление патчей, добавление новых исходников и др.), должны быть зафиксированы в git-коммитах и отправлены на сервер (push).

Для локалького клонирования репозитория проекта с использованием git-клиента нужно использовать команду:

git clone https://abf.rosalinux.ru/<пользователь или группа>/<имя-проекта>.git

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

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

Пример клонирования публичного проекта:

git clone https://abf.rosalinux.ru/rosa/hello.git

После выполнения команды локально создается директория с копией проекта, в которой можно производить все необходимые изменения перед сборкой.

Подготовка файлов для сборки

Для подготовки нужно создать в локальном репозитории файл с расширением .spec (например, test1.spec).

Примечание — Название файла, как правило, совпадает с названием проекта, но это не обязательное требование.

Дополнительно требуется создать файл .abf.yml с описанием исходных файлов, необходимых для сборки. Пример строки в .abf.yml:

sources:
  - имя_файла.tar.gz  sha1:1234567890abcdef…

Исходные файлы, которые необходимо использовать для сборки, прописываются в параметре source0. Следует обратить внимание, что все указанные исходные файлы при сборке должны быть заранее загружены в службу File Store, т. к. дополнительно загружаться со сторонних ресурсов в Интернете они не будут.

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

Добавление сторонних источников в репозиторий через службу File Store

Служба File Store является неотъемлемой частью ABF и используется для хранения сторонних исходных файлов, которые не включаются в git-репозиторий. Загрузка файлов осуществляется:

  • через веб-интерфейс службы по адресу https://file-store.rosa.ru по кнопке Add file (авторизация по логину и паролю от ABF) (рисунок 9);
  • с помощью командной утилиты abf-put.

Рисунок 9 ‒ Веб-интерфейс службы File Store

Утилита abf-put

Команда abf put предназначена для загрузки изменений, внесённых в локальном репозитории, на сервер ABF. С её помощью можно выполнить следующие действия:

  • загрузить бинарные файлы из текущей директории на файловый сервер ABF и добавить их идентификаторы в файл .abf.yml;
  • определить ненужные для сборки файлы, указанные в .abf.yml, и переместить их в секцию removed_sources файла .abf.yml;
  • применить все изменения в проекте, сделанные локально, и отправить их в удалённый git-репозиторий.

Пример использования команды:

abf put -m "Обновление версии пакета"

Команда abf put поддерживает следующие опции:

  • -m, --message <сообщение> ‒ сообщение коммита, передаваемое команде git commit;
  • -s, --minimal-file-size ‒ минимальный размер бинарного файла, при превышении которого файл загружается на файловый сервер (по умолчанию — 0);
  • -n, --do-not-remove-files ‒ не удалять бинарные файлы из текущей директории после их загрузки;
  • -a, --upload-all ‒ загружать все бинарные файлы из текущей директории, независимо от их использования в .spec-файле​.

Для получения ссылок на исходники, указанные в .spec-файле, используется команда:

spectool -g *.spec

Эта команда подставляет значения макросов %name и %version и скачивает соответствующий архив.

В результате выполнения следующей команды в .abf.yml автоматически добавляется строка с именем файла и его хеш-суммой SHA1:

abf-put имя_файла.tar.gz

Для поиска и выгрузки исходного файла из службы File Store необходимо скопировать хеш-сумму файла SHA1 и вставить в соответствующее поле "Hash to search" службы File Store. После нажатия на кнопку Search будет сформирована ссылка на скачивание файла.

Коммиты и отправка изменений на сервер

Для отправки изменений на сервер нужно:

  1. добавить файлы в индекс git:
git add
  1. зафиксировать изменения:
git commit -m "Initial commit"
  1. отправить изменения на сервер:
git push

После отправки изменений все добавленные в проект файлы будут отображаться в пользовательском веб-интерфейсе Системы в разделе работы с проектом (рисунок 10).

Рисунок 10 ‒ Список файлов, загруженных в пользовательский проект

Запуск сборки пакета

После подготовки файлов необходимо инициировать сборку. Для этого нужно:

  1. нажать кнопку Новая сборка в рабочем интерфейсе проекта ABF, после чего откроется меню сборки, где нужно выбрать необходимые параметры (рисунок 11);
  2. в выпадающем списке "Сохранить в репозиторий" выбрать проект, в который будет осуществляться сборка пакетов;
  3. в поле "Версия" выбрать ветку для сборки пакетов;
  4. в секции "Архитектура" отметить аппаратную архитектуру, под которую будет осуществляться сборка;

Рисунок 11 ‒ Меню сборки пакетов

Важно ‒ при первой сборке пакетов необходимо отключить какие-либо дополнительные репозитории в соответствующем блоке;

  1. в секции "Собрано для платформы" выбирать платформы, под которые будет осуществляться сборка.

Примечание — При необходимости в секции "Настройки" можно установить флажок "Создать контейнер автоматически" — это создаст мини-репозиторий только с результатом данной сборки. Также данная опция будет дополнительно предложена после окончания сборки пакетов.

Проверка тестов после сборки

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

Дополнительные тесты выполняются путем установки всех собранных пакетов, после чего Система проверяет, успешно ли прошла установка. Если какие-либо зависимости отсутствуют, тесты завершатся с ошибкой. В этом случае появится кнопка Перезапустить тесты.

Для инициации процесса сборки пакетов следует нажать на кнопку Начать сборку.

Просмотр сборочных листов

Для того чтобы в рабочем поле отобразились все сборочные листы проекта, нужно обновить рабочий интерфейс ABF (рисунок 12).

Рисунок 12 ‒ Список сборочных листов проекта

Для перехода на сборочную страницу нужно нажать на ID пакета. Адрес страницы сборочного листа имеет формат:

abf.io/buildlists/<номер_сборочного_листа>

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

На момент, пока сборка еще не завершена, на сборочной странице можно отменить сборку или пересоздать сборку нажатием на соответствующую кнопку:

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

Также на данной странице в режиме реального времени можно просматривать лог сборки (рисунок 13).

Рисунок 13 ‒ Просмотр лога сборки пакетов в реальном времени

После завершения сборки пакета полный лог сборки будет доступен в виде текстового файла.

Завершение сборки

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

Когда все пакеты успешно собраны и опубликованы в сборочном листе, в секции "Пакеты" отображается список всех собранных пакетов, в секции "Логи" — все логи сборки (рисунок 14).

Рисунок 14 ‒ Собранные пакеты и логи по текущему проекту

Файл script_output.log является основным логом сборки.

Все собранные пакеты будут опубликованы по адресу, который указывался ранее в п. Публикация собранных пакетов:

abf-downloads.rosa.ru/(или иной адрес данной копии abf)/<название_платформы>

После успешной сборки данный репозиторий может быть подключен как репозиторий к менеджеру пакетов DNF.