2010-02-09 2 views
12

У меня есть проект C, созданный в Hudson, который делает очень строит, у меня также есть spec-файл .rpm, используемый для создания rpms из этих источников.Использование Hudson для создания пакетов RPM

Есть ли у кого-нибудь опыт в том, как создавать rpms из всего этого с помощью Hudson?

В настоящее время единственным решением, которое я вижу, является создание задания, выполняющего скрипт, который проверяет svn экспортирует источники, создает tarball и делает всю сборку rpm. Это, похоже, не очень хорошо интегрируется с Хадсоном - например, как мне собрать артефакты?

ответ

1

Я не делал этого сам, но думал бы, что у вас может быть Hudson build rpms, но с зоной сборки rpm, находящейся в рабочем пространстве Hudson. Тогда вы сможете ссылаться на rpms как на артефакты.

Here - как вы используете другую область сборки с оборотами.

1

Что вы используете как инструмент сборки на hudson? Делать?

Вы можете создать структуру каталогов, которую rpm build будет использовать в рабочей области задания Hudson - это уже может быть в кассе, который делает Hudson, или может быть создан отдельно вашим скриптом сборки. Из этого каталога вы можете создать свои rpms (используя внешний процесс, который вы запускаете из Hudson?). После этого вы можете скопировать полученный rpm в каталог артефактов, используя обычные настройки настройки Hudson. (Хадсон определяет число environment variables, которое вы можете использовать - одно из них - это место рабочей области)

2

Не уверен, что у меня есть очень хороший ответ на ваш вопрос.

Это работало для меня, но чувствует избыточный вес для ваших нужд.

У меня было приличное количество успеха с этим, используя Maven плагин оборотов http://mojo.codehaus.org/rpm-maven-plugin/ в основном DSL для создания спецификации файлов, выложив источники и т.д.

Достоинством является Maven артефакт, который Гудзон можно более легко отслеживать.

Я добавил небольшой строгий скрипт в сборке maven (http://docs.codehaus.org/display/GMAVEN/Executing+Groovy+Code) для моих нужд в конце, чтобы автоматически обновить репозиторий yum, который размещает сборки, но в вашей ситуации я, вероятно, использовал бы скрипт перед Плагин rpm используется для вызова make.

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

1

Ant может использоваться для создания RPM через встроенную задачу RPM. Вы можете скомпилировать источники C с Ant с задачей CC (от Ant-contrib).

Затем вы можете использовать Hudson для сборки и упаковки нашего программного обеспечения.

2

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

В любом случае, несколько подсказок от меня:

  1. Вам понадобится площадь сборки для Hudson/Jenkins, это может быть просто каталогом в JENKINS_HOME. Вам нужно указать rpmbuild на него через .rpmmacros. Шахта выглядит так же, как %_topdir /srv/build, но вы, конечно, можете свободно определять там макросы.
  2. В моем последнем проекте мне нужно было создать RPM либо из ветвей интеграции (в рамках временного интервала интеграции), либо из внешней линии (за пределами временного интервала интеграции). Для этого я построил скрипт Perl, который проверил правильную ветку в зависимости от текущей даты и запустил на ней rpmbuild -bb project.spec. Поскольку этот скрипт также загружал RPM в репозиторий, мне не нужно было ничего кроме этого единственного сценария, то есть я фактически использовал Хадсона как продвинутый менеджер cron (автоматическая сборка три раза в день, ручная сборка на мыши). Тем не менее, это было SVN-инициировано, так что мы не строили излишне.
  3. Я хотел иметь чистые пакеты, а также сохранить возможность строить из командной строки. По этой причине моя спецификация RPM автоматически создала собственный tarball из экспорта SVN. Я взял на себя функции ехпортируя за текущий проект, поэтому он будет выглядеть так:

    %define module my_project 
    %define _curdir . 
    %define _release %(/usr/bin/svnversion -c %_curdir | %__sed 's/.*://g') 
    %define _moddir %module-%_version-%_release 
    %define _source %(/bin/tar czf %_sourcedir/%_moddir.tar.gz --transform="s|^./|%_moddir/|g" --exclude=.svn .; /bin/echo %_moddir.tar.gz) 
    

    , а затем в спецификации:

    Source0: %_source 
    
  4. В моем текущем проекте я расколоть, что сценарий на части, так что моя текущая работа Дженкинса состоит только из команды rpmbuild .... Причина в том, что мне не нужно было строить из разных ветвей.

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

+0

+1 как решение для смолы. – reen

+0

Как работает этот скрипт build-a-tarball, когда RPM создается независимо за пределами svn scaffoldng? Хотя это тест, который слишком много не работает, способность подтвердить независимую сборку очень ценна. – user2066657

2

Я согласен с вышесказанным - как только вы можете создать RPM из любой директории, вы можете приписать процесс сборки и перенести ее прямо в Хадсон.

Вот магия:

rpmbuild --define '_topdir '`pwd` -ba SPECS/helloworld.spec 

Это устанавливает каталог верхнего уровня для процесса сборки в качестве текущего каталога.

У меня была такая же проблема, и документально весь процесс на
http://www.itforeveryone.co.uk/rpm-build-hudson-jenkins.html

1

В какой-то момент, я заменил Maven DSL, я уже упоминал выше, с помощью пользовательского Scala плагин, отчасти просто научиться Scala. Он удовлетворил еще несколько потребностей. Но теперь я просто защищаю использование

fpm, который отлично справляется с 90% потребностей создания оборотов (также делает deb, et.аль)

http://www.semicomplete.com/blog/geekery/fpm.html

проекта здесь: https://github.com/jordansissel/fpm

0

Вот сценарий оболочки Дженкинс мы используем:

export PROJECT_NAME= 
export PROJECT_VERSION= 

#Cleanup 
rm -f /tmp/JENKINS-BUILD/SPECS/$PROJECT_NAME.rpm.spec 
rm -Rf /tmp/JENKINS-BUILD/SOURCES/$PROJECT_NAME /usr/src/redhat/SOURCES/$PROJECT_NAME 

#Copy sources/artifacts 
cp /var/lib/jenkins/jobs/$PROJECT_NAME/workspace/project-set/$PROJECT_NAME/showme/include/$PROJECT_NAME.rpm.spec /tmp/JENKINS-BUILD/SPECS/$PROJECT_NAME.rpm.spec 
cp -R /var/lib/jenkins/jobs/$PROJECT_NAME/workspace/project-set/$PROJECT_NAME/showme /usr/src/redhat/SOURCES/$PROJECT_NAME 
cp -R /var/lib/jenkins/jobs/$PROJECT_NAME/workspace/project-set/$PROJECT_NAME/showme /tmp/JENKINS-BUILD/SOURCES/$PROJECT_NAME 

#Build RPM 
rpmbuild --define 'BUILD_NUMBER '$BUILD_NUMBER -ba /tmp/JENKINS-BUILD/SPECS/$PROJECT_NAME.rpm.spec --define '_topdir '/tmp/JENKINS-BUILD/ 

cp /tmp/JENKINS-BUILD/RPMS/noarch/$PROJECT_NAME-$PROJECT_VERSION-$BUILD_NUMBER.noarch.rpm /var/lib/jenkins/jobs/$PROJECT_NAME/workspace 

(Кредит JT/JWT)

0

после некоторого исследования информация из многих блог-страниц и других ресурсов, я объединил все это в один скрипт, который можно было легко использовать i n jenkins для строительных пакетов: https://github.com/jhrcz/jenkins-rpm-builder.

он собирает артефакты (пакеты rpm) в форме репозитория yum, поэтому с некоторой конфигурацией httpd может быть перенаправлен на последнее стабильное построение репо.

в коде вы могли обнаружить, что он поддерживает подписание пакета и пытается решить все различия, которые необходимы betwen el5 и el6.

 Смежные вопросы

  • Нет связанных вопросов^_^