Gear/cronbuild
Материал из ALT Linux Wiki
(→Настройка cronbuild.) |
|||
(42 промежуточные версии не показаны) | |||
Строка 1: | Строка 1: | ||
- | + | <!-- {{stub}} --> | |
- | {{stub}} | + | |
== Введение в cronbuild. == | == Введение в cronbuild. == | ||
Строка 6: | Строка 5: | ||
Некоторые пакеты по своей природе нуждаются в постоянном обновлении, | Некоторые пакеты по своей природе нуждаются в постоянном обновлении, | ||
при этом при обновлении у этих пакетов спек практически не меняется. | при этом при обновлении у этих пакетов спек практически не меняется. | ||
- | + | Например, к таким пакетам относятся различные базы - антивирусные, оборудования | |
(foomatic-db, PCI IDs, мониторов, ...), cliparts, и т. д. | (foomatic-db, PCI IDs, мониторов, ...), cliparts, и т. д. | ||
Как правило, в версии/релизе таких пакетов присутствует timestamp. | Как правило, в версии/релизе таких пакетов присутствует timestamp. | ||
Система cronbuild предназначена для автоматизации сборки таких пакетов. | Система cronbuild предназначена для автоматизации сборки таких пакетов. | ||
+ | |||
Теперь майнтайнеру достаточно один раз настроить для пакета cronbuild | Теперь майнтайнеру достаточно один раз настроить для пакета cronbuild | ||
- | и пакет будет автоматически собираться в Сизиф | + | и в дальнейшем при появлении обновлений пакет будет автоматически собираться в Сизиф |
- | + | до тех пор, пока сборка не сломается. Сервер cronbuild проверяет пакет на наличие обновлений | |
+ | с заданной майнтайнером периодичностью, по умолчанию это раз в неделю. | ||
При этом пакеты собираются только тогда, когда это действительно нужно: | При этом пакеты собираются только тогда, когда это действительно нужно: | ||
Строка 18: | Строка 19: | ||
то сборка пакета будет пропущена, так как в ней нет необходимости. | то сборка пакета будет пропущена, так как в ней нет необходимости. | ||
- | == | + | Управлять сервисом Cronbuild просто: если нужно внести в пакет какие-то изменения, достаточно внести их локально и отправьть пакет на сборку вручную. При следующей попытке обновления робот склонирует уже измененный репозиторий, т.е. изменения будут подхвачены автоматически. |
+ | |||
+ | == Быстрая настройка == | ||
+ | |||
+ | 1. Создать служебный файл {{path|.gear/cronbuild-options}} в gear-репозитории: | ||
+ | echo "cronbuild_mailto=<email мейнтейнера" > .gear/cronbuild-options | ||
+ | |||
+ | 2. Закоммитить и собрать пакет с этим файлом | ||
+ | |||
+ | 3. Завести багу в https://bugzilla.altlinux.org/enter_bug.cgi?product=Infrastructure на компонент '''cronbuild'''. | ||
+ | В теме указать имя пакета. | ||
+ | |||
+ | == Настройка cronbuild == | ||
cronbuild состоит из 3-х частей: | cronbuild состоит из 3-х частей: | ||
Строка 24: | Строка 37: | ||
* утилиты для локальной сборки (пакет {{pkg|gear-cronbuild}}) | * утилиты для локальной сборки (пакет {{pkg|gear-cronbuild}}) | ||
* сервер удаленной сборки (cronbuild repocop.altlinux.org) | * сервер удаленной сборки (cronbuild repocop.altlinux.org) | ||
+ | |||
+ | Для того, чтобы воспользоваться cronbuild, надо написать по примерам скрипт {{cmd|.gear/cronbuild-update-source}} | ||
+ | и, возможно, другие скрипты, проверить их работоспособность с помощью локальных утилит и закоммитить их в .git. | ||
+ | |||
+ | После этого gear-cronbuild можно пользоваться локально, для ускорения работы, | ||
+ | а также можно разместить на сервере удаленной сборки. | ||
+ | |||
+ | === утилиты для локальной сборки (пакет {{pkg|gear-cronbuild}}) === | ||
+ | Для того, чтобы пользоваться скриптами cronbuild на локальной машине, необходимо установить пакет {{pkg|gear-cronbuild}}. | ||
+ | Команда {{prg|gear-cronbuild-apply-hooks}} вызывает локальные скрипты cronbuild и обновляет git репозиторий до следующей версии. | ||
+ | Для удобства пользователя есть скрипт-обертка {{prg|gear-cronbuild}}, | ||
+ | который обновляет репозиторий, собирает пакет, и в случае успеха, коммитит изменения. | ||
+ | |||
+ | скрипт-обертка {{prg|gear-cronbuild}}: | ||
+ | <source lang="bash"> | ||
+ | #!/bin/sh -ve | ||
+ | gear-cronbuild-apply-hooks | ||
+ | gear "$@" | ||
+ | gear-commit | ||
+ | </source> | ||
=== локальные скрипты cronbuild для автоматизации обновления .git репозитрия === | === локальные скрипты cronbuild для автоматизации обновления .git репозитрия === | ||
- | + | Для работы cronbuild необходимо добавить в репозиторий .watch файл (см. [[Watch]].) | |
+ | либо написать скрипт {{cmd|.gear/cronbuild-update-source}}. | ||
Этот скрипт пишется индивидуально для каждого пакета. Его задача -- | Этот скрипт пишется индивидуально для каждого пакета. Его задача -- | ||
обновить исходные тексты пакета, используя {{cmd|git-fetch}}, {{cmd|git-svn}} | обновить исходные тексты пакета, используя {{cmd|git-fetch}}, {{cmd|git-svn}} | ||
Строка 35: | Строка 69: | ||
Этот скрипт работает в случае, когда исходники публикуются в виде тарбола, | Этот скрипт работает в случае, когда исходники публикуются в виде тарбола, | ||
а в git репозитарии хранятся в распакованном виде в поддиректории {{term|$PKGNAME}}. | а в git репозитарии хранятся в распакованном виде в поддиректории {{term|$PKGNAME}}. | ||
+ | |||
+ | {{cmd|.gear/cronbuild-update-source}}: | ||
<source lang="bash"> | <source lang="bash"> | ||
#!/bin/sh -ve | #!/bin/sh -ve | ||
- | PKGNAME= | + | PKGNAME="$(gear --command sh -- -c 'printf %s "$gear_pkg_name"')" |
rm -f $PKGNAME-SNAPSHOT.tar.gz | rm -f $PKGNAME-SNAPSHOT.tar.gz | ||
wget -c http://www.pkgname.org/download/pkgname/pkgname-SNAPSHOT.tar.gz | wget -c http://www.pkgname.org/download/pkgname/pkgname-SNAPSHOT.tar.gz | ||
Строка 44: | Строка 80: | ||
git rm -r -f $PKGNAME | git rm -r -f $PKGNAME | ||
rm -rf $PKGNAME | rm -rf $PKGNAME | ||
- | mv $PKGNAME- | + | mv $PKGNAME-SNAPSHOT $PKGNAME |
git add $PKGNAME | git add $PKGNAME | ||
</source> | </source> | ||
+ | ==== обновление до новых версий с помошью .watch файла ==== | ||
+ | |||
+ | Если в репозитории присутствует .watch файл, то при отсутствии скрипта {{cmd|.gear/cronbuild-update-source}} | ||
+ | утилита {{prg|gear-cronbuild-apply-hooks}} запустит связку утилит rpm-uscan + [[Gear/gear-uupdate|gear-uupdate]], см. [[Watch]]. | ||
+ | Если .watch файл корректный, и стркутура репозитария поддерживается утилитой gear-uupdate, | ||
+ | то никаких скриптов для cronbuild создавать не нужно, .watch файла достаточно. | ||
==== замечания к скрипту ==== | ==== замечания к скрипту ==== | ||
- | * скрипт должен сообщать о всех проблемах при обновлении. Проще всего использовать {{path|#!/bin/sh -ve}}, | + | * Если версия не изменилась/исходники не обновлялись, если вы ничего не добавляли в индекс git, просто выходите через exit 0. Иначе перед выходом сначала сбросьте изменения в индексе git с помощью {{cmd|git reset}}. |
+ | * Удаляйте за собой мусор: временные файлы, каталоги и т.д. | ||
+ | * скрипт должен сообщать о всех проблемах при обновлении через exit с ненулевым exit_code. Проще всего использовать {{path|#!/bin/sh -ve}}, | ||
иначе придется у каждой команды проверять код завершения. | иначе придется у каждой команды проверять код завершения. | ||
* изменения должны быть добавлены в индекс git. | * изменения должны быть добавлены в индекс git. | ||
Строка 64: | Строка 108: | ||
Также можно переопределить стандартный changelog скриптом | Также можно переопределить стандартный changelog скриптом | ||
{{path|.gear/cronbuild-add-changelog}}. | {{path|.gear/cronbuild-add-changelog}}. | ||
+ | В теле этого скрипта должна быть вызвана команда {{cmd|add_changelog}} | ||
+ | с желаемым текстом<ref>Для работы механизм обновления секции changelog нужно определить значение %packager в <code>~/.rpmmacros</code>.</ref>. | ||
+ | === сервер удаленной сборки (cronbuild repocop.altlinux.org) === | ||
- | + | локальные утилиты gear-cronbuild имеют тот недостаток, что | |
+ | их надо не забывать запускать. Кроме того, они не автоматизируют отправку пакета в Сизиф. | ||
- | + | Сервер удаленной сборки cronbuild в песочнице repocop.altlinux.org | |
- | + | позволяет автоматизировать сборку пакетов полностью. | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
+ | ==== Как поставить пакет на сборку ==== | ||
+ | |||
+ | Если пакет успешно собирается с помощью gear-cronbuild локально, | ||
+ | пришло время поставить его на автоматическую сборку. | ||
+ | |||
+ | Для этого необходимо создать файл {{path|.gear/cronbuild-options}}, | ||
+ | указать там желаемую периодичность сборки и e-mail для рассылки оповещений, | ||
+ | и зарегистрировать в bugzilla заявку на Infrastructure/cronbuild. | ||
+ | |||
+ | ==== Как вносить изменения в сборку ==== | ||
+ | |||
+ | сервер сборки поддерживает 2 системы транспорта: | ||
+ | сборка по тегу из git+gear репозитория | ||
+ | и сборка из srpm. | ||
+ | |||
+ | * Сборка по тегу из git+gear репозитория. | ||
+ | Управление сборкой устроенно очень просто: | ||
+ | сервер клонирует последнюю успешную сборку в Сизиф | ||
+ | и применяет к ней gear-cronbuild. | ||
+ | Поэтому, если вы хотите починить или улучшить | ||
+ | автоматическую сборку, просто соберите пакет вручную, | ||
+ | и в дальнейшем автоматическая сборка будет идти на ее основе. | ||
+ | |||
+ | * сборка из srpm. | ||
+ | считается экспериментальной. | ||
== Приложения. == | == Приложения. == | ||
=== Полный список служебных файлов cronbuild в {{path|.gear/}} === | === Полный список служебных файлов cronbuild в {{path|.gear/}} === | ||
+ | |||
+ | ==== Скрипты, используемые утилитой {{prg|gear-cronbuild-apply-hooks}} ==== | ||
+ | |||
{| class="standard" | {| class="standard" | ||
!файл | !файл | ||
Строка 90: | Строка 162: | ||
|class="shadow"|cronbuild-add-changelog | |class="shadow"|cronbuild-add-changelog | ||
| Скрипт для кастомизации changelog. Не обязателен. | | Скрипт для кастомизации changelog. Не обязателен. | ||
+ | |} | ||
+ | Скрипты должны быть помечены как исполняемые. | ||
+ | |||
+ | Скрипты cronbuild-update-source, cronbuild-update-version, cronbuild-add-changelog получают спек-файл как первый аргумент. | ||
+ | |||
+ | ==== Другие файлы, используемые утилитой {{prg|gear-cronbuild-apply-hooks}} ==== | ||
+ | |||
+ | {| class="standard" | ||
+ | !файл | ||
+ | !Описание | ||
+ | |- | ||
+ | |class="shadow"|.gear/upstream/remotes | ||
+ | |настройка [[Gear/remotes|remotes]] для клонированного git репозитория. Не обязателен. | ||
+ | |- | ||
+ | |class="shadow"|.gear/cronbuild-git-config | ||
+ | |опции к команде git-config, для дополнительной настройки клонированного git репозитория. Устарел. | ||
+ | |} | ||
+ | |||
+ | ==== Файлы, используемые сервером сборки cronbuild repocop.altlinux.org ==== | ||
+ | |||
+ | {| class="standard" | ||
+ | !файл | ||
+ | !Описание | ||
+ | |- | ||
+ | |class="shadow"|cronbuild-tagname | ||
+ | | Скрипт для кастомизации git tag name. Не обязателен. | ||
+ | |- | ||
+ | |class="shadow"|cronbuild-tagmsg | ||
+ | | Скрипт для кастомизации git tag message. Не обязателен. | ||
|- | |- | ||
|class="shadow"|cronbuild-options | |class="shadow"|cronbuild-options | ||
- | | Конфигурационный файл. | + | | Конфигурационный файл. Требуется при размещении на сервере cronbuild. |
|} | |} | ||
Скрипты должны быть помечены как исполняемые. | Скрипты должны быть помечены как исполняемые. | ||
К файлам конфигурации это не относится. | К файлам конфигурации это не относится. | ||
- | |||
- | |||
=== cronbuild-options === | === cronbuild-options === | ||
Строка 103: | Строка 202: | ||
!переменная | !переменная | ||
!Описание | !Описание | ||
+ | |- | ||
+ | |class="shadow"|cronbuild_requires | ||
+ | |набор дополнительных пакетов, который будет передан в hsh-install для установки в chroot. | ||
+ | необходим, если скрипты используют утилиты, не входящие в базовый набор (curl, wget, git, unzip, ...) | ||
|- | |- | ||
|class="shadow"|cronbuild_interval | |class="shadow"|cronbuild_interval | ||
- | | | + | |периодичность сборок в днях. Желательно. По умолчанию — 3 дня. |
|- | |- | ||
- | |class="shadow"|cronbuild_mailto | + | |class="shadow"|'''cronbuild_mailto''' |
- | | | + | |'''e-mail ответственного. Обязательно.''' |
|- | |- | ||
|class="shadow"|cronbuild_cc | |class="shadow"|cronbuild_cc | ||
- | | | + | |список дополнительных e-mail (optional) |
|- | |- | ||
|class="shadow"|cronbuild_mastergit | |class="shadow"|cronbuild_mastergit | ||
- | | | + | |experimental |
|- | |- | ||
|class="shadow"|cronbuild_masterbranch | |class="shadow"|cronbuild_masterbranch | ||
- | | | + | |experimental |
|} | |} | ||
=== Пример использования .gear/cronbuild-* === | === Пример использования .gear/cronbuild-* === | ||
+ | |||
+ | == Примечания == | ||
+ | <references /> | ||
+ | |||
+ | {| class="wide" | ||
+ | | Разработано при поддержке [http://www.fasie.ru/ Фонда содействия развитию МП НТС] в рамках НИОКР 01201066526 | ||
+ | | [[Изображение:Logo_FASIE_preview.jpg|200px|rigft]] | ||
+ | |} | ||
+ | |||
+ | {{Category navigation|title=gear|category=gear|sortkey={{SUBPAGENAME}}}} | ||
+ | {{Category navigation|title=Автоматизация работы с пакетами|category=Packaging Automation}} | ||
+ | [[Категория:Справочники]] |
Текущая версия на 10:43, 6 февраля 2017
Содержание
|
Введение в cronbuild.
Некоторые пакеты по своей природе нуждаются в постоянном обновлении, при этом при обновлении у этих пакетов спек практически не меняется. Например, к таким пакетам относятся различные базы - антивирусные, оборудования (foomatic-db, PCI IDs, мониторов, ...), cliparts, и т. д. Как правило, в версии/релизе таких пакетов присутствует timestamp. Система cronbuild предназначена для автоматизации сборки таких пакетов.
Теперь майнтайнеру достаточно один раз настроить для пакета cronbuild и в дальнейшем при появлении обновлений пакет будет автоматически собираться в Сизиф до тех пор, пока сборка не сломается. Сервер cronbuild проверяет пакет на наличие обновлений с заданной майнтайнером периодичностью, по умолчанию это раз в неделю.
При этом пакеты собираются только тогда, когда это действительно нужно: если после обновления файлы исходников не изменились (согласно git diff <commit before update>), то сборка пакета будет пропущена, так как в ней нет необходимости.
Управлять сервисом Cronbuild просто: если нужно внести в пакет какие-то изменения, достаточно внести их локально и отправьть пакет на сборку вручную. При следующей попытке обновления робот склонирует уже измененный репозиторий, т.е. изменения будут подхвачены автоматически.
Быстрая настройка
1. Создать служебный файл .gear/cronbuild-options в gear-репозитории:
echo "cronbuild_mailto=<email мейнтейнера" > .gear/cronbuild-options
2. Закоммитить и собрать пакет с этим файлом
3. Завести багу в https://bugzilla.altlinux.org/enter_bug.cgi?product=Infrastructure на компонент cronbuild. В теме указать имя пакета.
Настройка cronbuild
cronbuild состоит из 3-х частей:
- локальные скрипты cronbuild для автоматизации обновления .git репозитрия.
- утилиты для локальной сборки (пакет gear-cronbuild)
- сервер удаленной сборки (cronbuild repocop.altlinux.org)
Для того, чтобы воспользоваться cronbuild, надо написать по примерам скрипт .gear/cronbuild-update-source и, возможно, другие скрипты, проверить их работоспособность с помощью локальных утилит и закоммитить их в .git.
После этого gear-cronbuild можно пользоваться локально, для ускорения работы, а также можно разместить на сервере удаленной сборки.
утилиты для локальной сборки (пакет gear-cronbuild)
Для того, чтобы пользоваться скриптами cronbuild на локальной машине, необходимо установить пакет gear-cronbuild. Команда gear-cronbuild-apply-hooks вызывает локальные скрипты cronbuild и обновляет git репозиторий до следующей версии. Для удобства пользователя есть скрипт-обертка gear-cronbuild, который обновляет репозиторий, собирает пакет, и в случае успеха, коммитит изменения.
скрипт-обертка gear-cronbuild:
#!/bin/sh -ve gear-cronbuild-apply-hooks gear "$@" gear-commit
локальные скрипты cronbuild для автоматизации обновления .git репозитрия
Для работы cronbuild необходимо добавить в репозиторий .watch файл (см. Watch.) либо написать скрипт .gear/cronbuild-update-source. Этот скрипт пишется индивидуально для каждого пакета. Его задача -- обновить исходные тексты пакета, используя git-fetch, git-svn или просто wget.
пример скрипта для обновления через wget
Этот скрипт работает в случае, когда исходники публикуются в виде тарбола, а в git репозитарии хранятся в распакованном виде в поддиректории $PKGNAME.
.gear/cronbuild-update-source:
#!/bin/sh -ve PKGNAME="$(gear --command sh -- -c 'printf %s "$gear_pkg_name"')" rm -f $PKGNAME-SNAPSHOT.tar.gz wget -c http://www.pkgname.org/download/pkgname/pkgname-SNAPSHOT.tar.gz tar xzf $PKGNAME-SNAPSHOT.tar.gz rm -f $PKGNAME-SNAPSHOT.tar.gz git rm -r -f $PKGNAME rm -rf $PKGNAME mv $PKGNAME-SNAPSHOT $PKGNAME git add $PKGNAME
обновление до новых версий с помошью .watch файла
Если в репозитории присутствует .watch файл, то при отсутствии скрипта .gear/cronbuild-update-source утилита gear-cronbuild-apply-hooks запустит связку утилит rpm-uscan + gear-uupdate, см. Watch. Если .watch файл корректный, и стркутура репозитария поддерживается утилитой gear-uupdate, то никаких скриптов для cronbuild создавать не нужно, .watch файла достаточно.
замечания к скрипту
- Если версия не изменилась/исходники не обновлялись, если вы ничего не добавляли в индекс git, просто выходите через exit 0. Иначе перед выходом сначала сбросьте изменения в индексе git с помощью git reset.
- Удаляйте за собой мусор: временные файлы, каталоги и т.д.
- скрипт должен сообщать о всех проблемах при обновлении через exit с ненулевым exit_code. Проще всего использовать #!/bin/sh -ve,
иначе придется у каждой команды проверять код завершения.
- изменения должны быть добавлены в индекс git.
- не нужно коммитить изменения: git-cronbuild это сделает автоматически после успешной сборки.
Изменение версии/релиза пакета
Утилита gear-cronbuild-update-spec-timestamp автоматически ищет и обновляет timestamp вида ГГГГММДД в тегах Serial, Epoch, Version, Release, либо в декларациях %define <macrosname> <timestamp>. Если пакет использует другую систему нумерации, необходимо создать свой скрипт изменения версии/релиза пакета .gear/cronbuild-update-version. Также можно переопределить стандартный changelog скриптом .gear/cronbuild-add-changelog. В теле этого скрипта должна быть вызвана команда add_changelog с желаемым текстом[1].
сервер удаленной сборки (cronbuild repocop.altlinux.org)
локальные утилиты gear-cronbuild имеют тот недостаток, что их надо не забывать запускать. Кроме того, они не автоматизируют отправку пакета в Сизиф.
Сервер удаленной сборки cronbuild в песочнице repocop.altlinux.org позволяет автоматизировать сборку пакетов полностью.
Как поставить пакет на сборку
Если пакет успешно собирается с помощью gear-cronbuild локально, пришло время поставить его на автоматическую сборку.
Для этого необходимо создать файл .gear/cronbuild-options, указать там желаемую периодичность сборки и e-mail для рассылки оповещений, и зарегистрировать в bugzilla заявку на Infrastructure/cronbuild.
Как вносить изменения в сборку
сервер сборки поддерживает 2 системы транспорта: сборка по тегу из git+gear репозитория и сборка из srpm.
- Сборка по тегу из git+gear репозитория.
Управление сборкой устроенно очень просто: сервер клонирует последнюю успешную сборку в Сизиф и применяет к ней gear-cronbuild. Поэтому, если вы хотите починить или улучшить автоматическую сборку, просто соберите пакет вручную, и в дальнейшем автоматическая сборка будет идти на ее основе.
- сборка из srpm.
считается экспериментальной.
Приложения.
Полный список служебных файлов cronbuild в .gear/
Скрипты, используемые утилитой gear-cronbuild-apply-hooks
файл | Описание |
---|---|
cronbuild-update-source | Основной скрипт для обновления содержимого пакета. |
cronbuild-update-version | Скрипт для обновления версии и/ли релиза пакета. Не обязателен. |
cronbuild-add-changelog | Скрипт для кастомизации changelog. Не обязателен. |
Скрипты должны быть помечены как исполняемые.
Скрипты cronbuild-update-source, cronbuild-update-version, cronbuild-add-changelog получают спек-файл как первый аргумент.
Другие файлы, используемые утилитой gear-cronbuild-apply-hooks
файл | Описание |
---|---|
.gear/upstream/remotes | настройка remotes для клонированного git репозитория. Не обязателен. |
.gear/cronbuild-git-config | опции к команде git-config, для дополнительной настройки клонированного git репозитория. Устарел. |
Файлы, используемые сервером сборки cronbuild repocop.altlinux.org
файл | Описание |
---|---|
cronbuild-tagname | Скрипт для кастомизации git tag name. Не обязателен. |
cronbuild-tagmsg | Скрипт для кастомизации git tag message. Не обязателен. |
cronbuild-options | Конфигурационный файл. Требуется при размещении на сервере cronbuild. |
Скрипты должны быть помечены как исполняемые. К файлам конфигурации это не относится.
cronbuild-options
переменная | Описание |
---|---|
cronbuild_requires | набор дополнительных пакетов, который будет передан в hsh-install для установки в chroot.
необходим, если скрипты используют утилиты, не входящие в базовый набор (curl, wget, git, unzip, ...) |
cronbuild_interval | периодичность сборок в днях. Желательно. По умолчанию — 3 дня. |
cronbuild_mailto | e-mail ответственного. Обязательно. |
cronbuild_cc | список дополнительных e-mail (optional) |
cronbuild_mastergit | experimental |
cronbuild_masterbranch | experimental |
Пример использования .gear/cronbuild-*
Примечания
- ↑ Для работы механизм обновления секции changelog нужно определить значение %packager в
~/.rpmmacros
.
Разработано при поддержке Фонда содействия развитию МП НТС в рамках НИОКР 01201066526 |