Как я могу гарантировать, что все мои ведомые устройства сборки Hudson используют одну и ту же ревизию svn для ежедневной сборки?

На моем рабочем месте Hudson используется для ежедневных сборок, при этом несколько ведомых устройств сборки (один Linux, один Windows, один Mac) проверяют нашу полную кодовую базу из svn и создают наше приложение в полночь каждый день. Все это работает довольно хорошо.

Однако иногда возникает проблема ... иногда разработчик работает допоздна и проверяет изменения в svn сразу после полуночи. Когда это происходит, возможно, что некоторые из подчиненных устройств ежедневной сборки будут выполнять свою «svn checkout» до обработки фиксации svn, в то время как другие подчиненные устройства сборки будут делать это после обработки фиксации. Когда это происходит, мы получаем разные версии, созданные на разных платформах ... например. сборка Mac может быть сборкой SVN версии 5555, тогда как сборка Windows в конечном итоге будет сборкой SVN версии 5556. Это плохо, поскольку мы хотим, чтобы все ежедневные сборки для данного дня основывались на одной и той же кодовой базе.

Я полагаю, что один из способов избежать этого - запретить разработчикам фиксировать svn между 23:30 и 12:30, но я бы предпочел более элегантное решение, которое не зависит от поведения разработчиков. Есть один? В частности, если есть способ сказать hudson, чтобы он проверял версию кода, которая была текущей в полночь текущего дня (например, "svn co -r {" the-current-date "}") вместо проверки ГОЛОВА, я думаю, это поможет.

Есть ли простой / простой способ справиться с этой проблемой?


person Jeremy Friesner    schedule 01.08.2010    source источник
comment
лол, это было хорошо. Надеюсь, у них нет проблем, чтобы разработчики были до 13:00 или даже позже. ;)   -  person Peter Schuetze    schedule 06.10.2010


Ответы (2)


Решение немного зависит от того, как вы начинаете сборку. Если все они запускаются по таймеру, вы можете позволить им запускаться одновременно. Риск того, что у вас будут разные ревизии, будет минимальным. Более элегантная версия - иметь одно задание, которое запускает все ваши задания сборки, передавая ревизию в качестве параметра. Если сборка не слишком длинная, вы можете создать одно задание, которое затем передаст ревизию всем другим заданиям.

РЕДАКТИРОВАТЬ: В настоящее время Hudson (1.376) не поддерживает следующее.

Я также нашел хорошую книгу по svn. В нем указано, что вы можете заменить ревизию датой в фигурных скобках. Таким образом, вы можете попробовать <svn-url>@{00:00} в своей конфигурации задания.

person Peter Schuetze    schedule 02.08.2010
comment
Уловка @ {00:00} изящная; К сожалению, он не работает через svn-клиент на основе java, встроенный в hudson. Еще одно соображение: если ваш репозиторий использует svn: externals, то я считаю, что внешние файлы также могут быть получены с неправильной ревизией. - person jdkoftinoff; 06.10.2010

Другая идея, которую я нашел полезной, - разделить один и тот же исходный каталог между ведомыми устройствами и иметь одну команду svn up, это сократит время обновления svn, а также избавит вас от боли синхронизации.

Я использую nfs на машинах с Linux, также подойдет sshfs.

person Gadolin    schedule 29.06.2011