Jenkins CI использует неправильную версию SVN для сборки - PullRequest
18 голосов
/ 03 мая 2011

В настоящее время я работаю с Jenkins CI Server и хочу запустить задание / сборку через svn post commit hook. Пока все работает как положено, но при сборке используется предыдущая версия SVN.

Например: я проверяю свои файлы, и клиент показывает мне ревизию 90, сборка начинается, но она использует 89.

Хук после фиксации выглядит так:

UUID=`svnlook uuid $REPOS`
/usr/bin/wget \
     --header "Content-Type:text/plain;charset=UTF-8" \
     --post-data "`svnlook changed --revision $REV $REPOS`" \
     --output-document "-" \
     --timeout=2 \
     http://ci-jenkins/job/Job1/build?rev=$REV 1>&2

Стратегия извлечения в Jenkins в сконфигурированном «Всегда извлекать свежую копию». Что случилось? Я все еще начинаю с этого и должен многому научиться. Поэтому, пожалуйста, помните об этом, чтобы ответить мне. : -)

Ответы [ 5 ]

27 голосов
/ 17 мая 2013

Столкнулся с той же проблемой и обнаружил это :

В основном вам нужно добавить @HEAD в конце URL-адреса SVN, например ::10000

http://svn.yourserver.com/svn/project/trunk@HEAD

13 голосов
/ 03 мая 2011

Убедитесь, что дата / время на сервере Jenkins совпадают с датой / временем на сервере SVN (или хотя бы отстают от него).

Уверен, что Дженкинс использует дату / время при оформлении заказа и обновлений.

3 голосов
/ 04 мая 2011

Привет, в настоящее время я работаю с Jenkins CI Server и хочу запустить задание / сборку через svn post commit hook.

Ладно, я укушу: почему вы не просто позволяете Дженкинсу сработать при совершении Subversion?

Я видел, как люди делают это для CVS, потому что Дженкинсу может потребоваться много времени, чтобы опросить CVS, чтобы узнать, была ли сделана фиксация CVS. Но Дженкинсу требуется всего несколько секунд, чтобы определить, что фиксация Subversion выполнена.

Если вы действительно настаиваете на запуске сборки Jenkins самостоятельно, почему бы просто не настроить свои проекты для разрешения удаленного запуска? В разделе «Построение триггеров» для каждого задания вы указываете токен, а затем запускаете его с помощью wget:

 wget $JENKINS_URL/job/foo?token=BUILD_NOW

(Предполагается, что установленный токен BUILD_NOW)

Таким образом, вам не нужно беспокоиться о ревизии, и Дженкинс создаст последнюю ревизию, которая была проверена.

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

  • Спите около 30 секунд, прежде чем запускать сборку, и посмотрите, поможет ли это. Я бы не стал хранить его в сценарии, потому что он задерживает коммит Subversion, но это может помочь вам определить, что это не проблема синхронизации.
  • Что, если вы добавите один к $REV и затем запустите сборку Jenkin? Может быть, это решит проблему.
2 голосов
/ 11 октября 2013

это связано с синхронизацией времени между сервером SVN и сервером Дженкинса. Другими словами, дата / время двух серверов не совпадают. Я столкнулся с этим, и у меня было три минуты разницы, я решил эту проблему, настроив задержку в 5 минут перед выполнением задания jenkins в расширенных параметрах проекта.

2 голосов
/ 03 мая 2011

Это может произойти, если время на сервере Jenkins и Subversion не синхронизировано. Убедитесь, что время остается в пределах 2 секунд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...