Необходимо создать набор скриптов для получения пакетов из git.etersoft. Для этого нужно организовать файл ответсвенных за сборку по аналогии с вариантами: http://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus/files/list/ Формат файла предполагается такой: _репозиторий1_ _имя1_ _репозиторий2_ _имя2_ _репозиторий3_ _имя3_ при этом сборка должна осуществляться так: 1) делается поиск новых обновлённых репозиториев по схеме - ищутся все репозитории из списка, для которых не существует пакета более высокой версии в хранилище пакетов. Сравнение проводится по тегу. - после неудачной сборки имя репозитория и версия тега складываются в кеш, если пакет ранее собрался неудачно, то при автоматической сборке пакетов он пропускается Для начала нужно просто сформировать список логику выбора по тегу и пропуска по кешу не собранных можно первоначально пропустить... 2) Составленный список пакетов сортируется в порядке для пересборки по зависимостям... Этот пункт тоже пока можно пропустить... 3) для каждого пакета из найденного списка делается клонирование во временный каталог http://git.etersoft.ru/people/_имя_/packages/_репозиторий_.git, для которого производится попытка сборки на текущем хранилище пакетов. Если попытка удалась, то результат перекладывается в хранилище, и делается git-push в http://git.etersoft.ru/archive/_репозиторий_.git, при этом, если в кеше не собранных пакетов, рпеозиторий этого пакета был указан, он от туда убирается. Иначе имя репозитория и версия (пот тегу) заносятся в кеш не собранных. Итого нужно иметь два скрипта: 1. собрать пакет, который собирает выбранных пакет выписывая его у ответсвенного. Причём, если первоначально пакет будет собираться без учёта тегов (текущий HEAD ветки master), по в дальнейшем хотелось бы в дефолтном состоянии запускать сборку последней версии по тегу, а также уметь указать проивольные ветку и коммит или тег... 2. собрать все пакеты, нужно уметь собрать в дефолтную сборку отдельных пакетов из составленного по указанному выше алгоритму... Причём аосле добавления кеша ранее собираемых, но не собранных, хотелось бы уметь форсом пробовать собрать и их... Хотелось бы хранить в конфиге список переменных с префиксами каталогов и URL репоиториев
Сделан пакет утилит autobuild, из которого предполагается собрать набор скриптов для робота. В задачи робота входят регулярные сборки репозиториев из git.eterrsoft.ru, раскладывание результатов в репозиторий разработчиков и оповещение ответственных за сборку об этих результатах. Необходимо описать логику работы скриптов в виде минимальной документации и организовать разворачиваемое решение поверх girar. Предполагается, что сборка проходит на специально выделенном сервере не привязанном к git.etersoft, что озаначает, необходимость создания специального пользователя, от имени которого который будет вестись работа в каталоге git.etersoft.ru:/archive/.
Результат материализовался в виде двух пакетов: http://git.etersoft.ru/people/sin/packages/autobuild.git http://git.etersoft.ru/people/sin/packages/geet-robot.git autobuild представляет набор модулей на питоне для работы с git и gear. geet-robot - Gear Etersoft Robot - это набор утилит, реализующих политику сборки пакетов из Git-репозиториев rpm-пакетов. В него также водит сервис логика работы которого предполагает организовать автоматическую пересборку пакетов в репозитарий дистрибутива по запросам, событиям обновления репозиториевм и по времени. Пока он находится на стадии доработки. Пакет спланирован так, чтобы разворачиваться на сборочной среде, в которой доступен hasher и репозитории для сборки. Эти параметры могут изменены пользователся, которые въодят в группу geet_admin. Логика работы робота требует некоторго обсуждения и уточнения всех деталей поп безопасности. Сейчас предполагается, что у робота есть свой безпарольный ssh-ключ, с помощью которого он ходит на git.etersoft.ru, а после удачной сборки пакетов, с помощью этого ключа заливает результат обратно в свой собственный набор репозиториев - /archive. Это несколько отличается от схемы принятой сейчас в ALT Linux. Кроме этого отличия в интепретации собержимого /archive, который в ALT Linux сейчас представляет собой регулярный gear-srpmimport результатов сборки, у нашего робота несколько иной критерий получения обновлений для сборки. Если в ALT Linux планируется использовать теги, то у нас это специальная ветка, в общем случае любая, но по умолчанию - это rc. Push в эту или другую отслеживаемую ветку в girar означает для робота необходимость пересобрать пакет. Кроме всего прочего в autobuild сейчас входит полезный набот утилит geet-rpm, geet-hsh, позволяющий создавать не конфликтующие rpm-пакеты, для сборок во время отладки. Создавая временный commit утилиты добавляют к релизу суффикс вида dbg%ДАТА.%ВРЕМЯ. Это избавляет от еобходимости отслеживать во время отладки номер релиза, сохраняя возможность, увеличив исходный релиз, получить пакет старше всех предыдущих сборок. По такой же технологии планируется быть построена сборка пакетов роботом, который будет добавлять с своих репозиториях номер сборки пакета (вида bld1, blb2 и т.д.) и автоматически увеличивать его при пересборке одного и того же коммита.
При написании была получена новая формула gear + etersoft = geet Именно так называется изначальный вариант, girar-etersoft-utils.
Необходимо будет завершить эту часть для автоматической сборки любых пакетов из gear. Нужна минимальная документация... И, желательно, чтобы первоначальная настройка стала шаблоном для последующего использования по умолчанию.
Текущие проблемы: - почта (отправка уведомлений, включается опцией, по умолчанию отключена); - переменные окружения, должны использоваться в шаблоне конфига, который по умолчанию настроен для сборки; - нужные параметры для geet-autobuilder, позволяющие пересобрать один отдельно взятый пакет, заменяя отдельные опции конфига
Текущие баги 1) не отрабатывает наследование meta-целей при сборке из git.eter возникает ошибка, хотя аналогичная попытка локальной сборки из git.srv работает: [sin@server geet]$ geet-autobuilder -v * Make directory: /home/sin/.geet/history/rect * Update package rect from ['git.srv:/people/imelnikov/packages/rect.git', 'git.eter:/people/imelnikov/packages/rect.git'] (branch: master) * Make directory: /home/sin/.geet/archive/rect $ git-init + Initialized empty Git repository in .git/ $ git-fetch ['git.srv:/people/imelnikov/packages/rect.git', 'git.eter:/people/imelnikov/packages/rect.git'] +master:build - ssh: Could not resolve hostname [git.srv: Name or service not known - fatal: The remote end hung up unexpectedly $ git-checkout -f build - git checkout: updating paths is incompatible with switching branches/forcing - Did you intend to checkout 'build' which can not be resolved as commit? Traceback (most recent call last): File "/usr/bin/geet-autobuilder", line 71, in <module> AutoBuilder().process() File "/usr/bin/geet-autobuilder", line 66, in process ret = self.process_pfiles() File "/usr/bin/geet-autobuilder", line 58, in process_pfiles ret += [self.build_package(p) for p in packages_from_file(f)] File "/usr/bin/geet-autobuilder", line 50, in build_package self.update(p) File "/usr/bin/geet-autobuilder", line 31, in update Builder.update(self, p) File "/usr/lib/python2.5/site-packages/geet/builder.py", line 112, in update git.checkout('build', '-f') File "/usr/lib/python2.5/site-packages/geet/utils/functions.py", line 31, in callf return method(*args, **kwargs) File "/usr/lib/python2.5/site-packages/geet/git.py", line 59, in checkout run('git-checkout %s %s' % (args, branch)) File "/usr/lib/python2.5/site-packages/geet/utils/functions.py", line 122, in run raise RunError, ret geet.utils.functions.RunError: Abnormal program termination Содержимое pfile: meta srv <------>git = git.srv:/people/${packager}/packages/${name}.git <------>branch = master <------>target = i586 <------>destination = sisyphus:/var/ftp/pub/Etersoft <------>destination = newbranch:/var/ftp/pub/Etersoft meta eter srv <------>git = git.eter:/people/${packager}/packages/${name}.git meta force <------>force = yes meta rlz <------>packager = rlz meta vano <------>packager = imelnikov #python-module-kadmin5 srv vano #python-module-IceSSL srv vano force #python-module-Tartarus srv vano force #Tartarus-Kadmin5 srv vano force #Tartarus-Hello srv vano force #python-module-repofilter srv vano rect srv vano geet srv rlz 2) не обрабатываются ошибки отсутствия meta-целей. Например, если sin отсутствует, то для "openssl srv sin" мы получим: [sin@server geet]$ geet-autobuilder -v Traceback (most recent call last): File "/usr/bin/geet-autobuilder", line 71, in <module> AutoBuilder().process() File "/usr/bin/geet-autobuilder", line 66, in process ret = self.process_pfiles() File "/usr/bin/geet-autobuilder", line 58, in process_pfiles ret += [self.build_package(p) for p in packages_from_file(f)] File "/usr/lib/python2.5/site-packages/geet/package.py", line 60, in packages_from_file _copy_values(current, clss[1:], meta) File "/usr/lib/python2.5/site-packages/geet/package.py", line 33, in _copy_values for meta in (meta_dict[i] for i in from_list): File "/usr/lib/python2.5/site-packages/geet/package.py", line 33, in <genexpr> for meta in (meta_dict[i] for i in from_list): KeyError: 'sin'
Уже с месяц используем в офисе. Все, что здесь писалось изменилось и не соответствует полученной системе.