Можно ли настроить Hudson для создания каждой ревизии? - PullRequest
7 голосов
/ 04 июня 2009

Я начал экспериментировать с Хадсоном в качестве сервера сборки. Я использую Subversion и настроен на опрос каждую минуту. Проблема, с которой я сталкиваюсь, заключается в том, что если сборка с 10-й ревизией занимает 5 минут и в течение этого времени 5 коммитов, то Хадсон будет следующей сборкой 15-й версии.

Есть ли способ обеспечить сборку каждой ревизии?

Ответы [ 5 ]

10 голосов
/ 06 мая 2010

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

  • добавить REVISION строковый параметр к вашей работе
  • добавьте параметр ${REVISION} к URL-адресу хранилища,
    например: https://server/path/myproject${REVISION}
  • установите имя локальной папки на «myproject» (см. Предыдущий пример), потому что переменная REVISION раскрывается только в URL, но при создании папки Hudson не будет ее раскрывать, в результате чего папка с именем : myproject${REVISION}
  • вызывает параметризованную сборку из ловушки post-commit, например: /usr/bin/wget \ --auth-no-challenge \ --no-check-certificate \ --user=me \ --password=mypasswd \ https: //server/path/job/jobname/buildWithParameters?delay=0sec\&REVISION=%40$REV \ -O /dev/null

Если вы хотите запустить сборку вручную, у вас есть две возможности:

  • если вы хотите построить ревизию HEAD, вы должны оставить параметр REVISION пустым
  • если вы хотите создать определенную ревизию, вам нужно ввести @NNN (например: @ 1234).

Знак @ очень важен, потому что весь этот трюк основан на том, что плагин Subversion интерпретирует URL@NNN как get revision NNN from repository at URL. Если вы забудете @, Subversion просто скажет, что не может найти папку https://server/path/myprojectNNN. Вот почему вы должны поставить %40 между REVISION= и $REV в команде wget, %40 - экранированный символ для @.

4 голосов
/ 25 июня 2009

У Хадсона пока нет этой возможности, но ее несколько раз спрашивали в списке рассылки. См. выпуск 673

1 голос
/ 04 июня 2009

В SCM-части конфигурации сборки у вас должен быть раздел «Построение триггеров» и опция «Удаленная сборка триггеров (например, из скриптов)». Согласно справочной информации рядом с этой опцией вы можете написать сценарий действия после фиксации, чтобы каждый коммит запускал новую сборку. Поскольку у hudson есть очередь на сборку, вы должны строить каждую ревизию.

Вот ссылка, которая может вам помочь: https://hudson.dev.java.net/build.html

Вот пример того, как начать сборку с параметрами (подробности см. В моем комментарии): http://wiki.hudson -ci.org / дисплей / HUDSON / Параметризованная + Постройте

0 голосов
/ 30 декабря 2010

Я использовал подход fchateaus выше (спасибо, мужик!) И изменил его для работы с Mercurial.

Вам нужно будет отредактировать .hg / hgrc на центральном сервере и вставить хук группы изменений. Имейте в виду, что группы изменений устанавливают только первую группу изменений в переменную среды HG_NODE, поэтому вам нужно выполнить hg tip, чтобы получить реальный узел tip и передать его через URL. Небольшая хитрость, которую нужно сделать в однострочнике, но я понял это.

Это то, что вы сделали бы для Hudson, работающего на Windows .

[hooks]
# this uses wget to hit the hudson url responsible for starting a build - %HG_NODE% only gets first changeset of changegroup, so use hg tip to grab changeset most recently added instead
changegroup.hudson = for /f "tokens=*" %G IN ('hg tip --template {node}') DO "C:\Program Files (x86)\UnxUtils\usr\local\wbin\wget" --non-verbose --spider http://HudsonServer:8080/job/{Repository}/buildWithParameters?HgRevId=%G | ECHO Result of Hudson Polling Request For Node %G
# TODO: when Hudson implements polling with parameters, change to something like this
#changegroup.hudson = for /f "tokens=*" %G IN ('hg tip --template {node}') DO "C:\Program Files (x86)\UnxUtils\usr\local\wbin\wget" --non-verbose --spider http://HudsonServer:8080/job/{Repository}/polling?HgRevId=%G | ECHO Result of Hudson Polling Request For Node %G
0 голосов
/ 07 мая 2010

Ключом к тому, чтобы убедиться, что каждый коммит построен в Hudson, является «Параметризованная сборка» и ТОЛЬКО ЕСЛИ сборка триггера с различными значениями параметров, hudson будет считать, что это новая сборка и должна храниться в очереди сборки. Или это не будет записано Хадсоном, так как он считает, что это бессмысленная сборка по сравнению с предыдущей

например. Вы можете нажать «Build Now», чтобы запустить сборку три раза и просто оставить параметр сборки «нулевым». вы увидите только первые две сборки в очереди Hudson. Третий будет проигнорирован: P круто, но очень плохо, что он не найден в каком-то документе, но с моими экспериментами для времен: (

...