2010-08-01 13 views
5

Moje miejsce pracy używa Hudsona do codziennych kompilacji, z kilkoma zbudowanymi niewolnikami (jeden Linux, jeden Windows, jeden Mac) sprawdzając nasz pełny kod z svn i budując naszą aplikację o północy każdego dnia. To wszystko działa całkiem dobrze.Jak mogę się upewnić, że wszyscy moi hudsonowie budują niewolników sprawdzają tę samą wersję svn dla codziennej wersji?

Występuje sporadyczny problem, który jednak się zdarza ... czasami programista będzie pracował późno i sprawdzi zmianę svn tuż po północy. Kiedy to nastąpi, możliwe jest, że niektórzy z codziennych niewolników budujących wykonają swoje "svn checkout" zanim svn commit zostanie przetworzony, podczas gdy inne build slave zrobi to po przetworzeniu commit. Kiedy tak się stanie, kończymy na różnych wersjach zbudowanych na różnych platformach ... np. kompilacja Maca może mieć wersję SVN 5555, podczas gdy kompilacja Windowsa kończy się budową wersji SVN 5556. To źle, ponieważ chcemy, aby wszystkie codzienne kompilacje dla danego dnia były oparte na tej samej bazie kodu.

Przypuszczam, że jednym ze sposobów uniknięcia tego jest zakazanie programistom zatwierdzania svn między 23:30 a 12:30, ale wolę bardziej eleganckie rozwiązanie, które nie zależy od zachowania programistów. Czy jest jeden? W szczególności, jeśli istnieje sposób, aby powiedzieć hudsonowi, aby sprawdził wersję kodu, która była aktualna o północy bieżącego dnia (np. "Svn co -r {" the-current-date "}") zamiast sprawdzać HEAD, myślę, że to może załatwić sprawę.

Czy istnieje wspólny/łatwy sposób na rozwiązanie tego problemu?

+0

Rozpocznij budowę o 1 rano? :) –

+0

lol, to było dobre. Mam nadzieję, że nie mają problemu, więc deweloperzy są tam do godziny 13, a nawet później. ;) –

Odpowiedz

3

Rozwiązanie zależy w niewielkim stopniu od sposobu rozpoczęcia kompilacji. Jeśli wszystkie są uruchomione, możesz pozwolić im zacząć wszystko w tym samym czasie. Ryzyko, że skończysz z różnymi wersjami, będzie minimalne. Bardziej elegancką wersją jest posiadanie jednego zadania, które uruchamia wszystkie zadania kompilacji, przekazując wersję jako parametr. Jeśli kompilacja nie jest zbyt długa, możesz zbudować jedno zadanie, które następnie przejdzie rewizję do wszystkich innych zadań.

EDIT: Obecnie następuje nie jest obsługiwany przez Hudson (1.376)

Znalazłam też piękny svn book. Stwierdza, że ​​można zastąpić wersję datą w nawiasach klamrowych. Więc możesz spróbować <svn-url>@{00:00} w swojej konfiguracji pracy.

+0

Sztuczka @ {00:00} jest zgrabna; Niestety nie działa on za pośrednictwem klienta svn opartego na Javie, który jest osadzony w hudson. Jeszcze jedna uwaga: jeśli twoje repozytorium używa svn: externals, to uważam, że zewnętrzne mogą być również pobierane z niewłaściwą wersją. – jdkoftinoff

+0

Właśnie to zauważyłem. :( –

0

Innym pomysłem, który mi się przydał, było udostępnienie tego samego katalogu źródłowego wśród niewolników i wykonanie jednego polecenia svn up, co skróciło czas aktualizacji svn, a także zwolni cię z bólu związanego z synchronizacją .

Używam nfs na maszynach typu linux, również sshfs będzie działać.