2009-11-21 12 views
6

Wtyczka git dla hudson działa dobrze. Jednak skrypt budujący musi aktualizować numer wersji w plikach w repozytorium, zatwierdzać i przekazywać do repozytorium.Przepytanie pętli nieskończonej Hudson dla zmian w repozytorium Git?

Gdy Hudson odpytuje, aby sprawdzić zmiany, przechodzi w nieskończoną pętlę, ponieważ widzi, że zatwierdzenie jako "zmiana" jest ponownie budowane, co powoduje zmianę, więc ponownie się buduje, następnie zatwierdza kolejną zmianę itp. .. Masz pomysł.

zatrzymałem go, prowadził „dziennik git” w każdym repozytorium i porównano najnowsze popełniają identyfikatory są dokładnie HEAD samo przy użyciu git ls-tree

Również Hudson prowadzi to polecenie, aby sprawdzić zmiany:

git pobieraniu + bibl/głowice/: bibl/piloty/pochodzenie/ git ls-tree HEAD

od samego Hudson pchnął popełnić z jego repozytorium do pracy, i widocznie wyniki ls-tree mecz, w jaki sposób to polecenie decyduje o tym, że nastąpiła zmiana?

Wygląda na to, że musi przechowywać wyniki ls-tree przed wykonaniem kompilacji i porównania z tym, które nie będzie miało ostatniego zatwierdzenia. Ah. Mogę spróbować wyłączyć zatwierdzenie, aby przetestować tę teorię.

W każdym razie, zamiast naprawić jakiś problem z wtyczki Git dla Hudson, co mogę zrobić, aby na końcu mojej kompilacji upewnić się, że repozytorium jest identyczne i że Hudson to zobaczy.

Jak to naprawić? Jakieś pomysły?

Wayne

+0

Rzeczywiście. Kiedy zatwierdzenie jest skomentowane, więc skrypt przesuwa tylko do kilku repozytoriów, działa poprawnie. Oznacza to, że Hudson rozpoznaje zerowe zmiany i czeka na zmiany bez pętli. Jak zatrzymać nieskończoną pętlę. Wygląda na to, że plugin git dla Hudson zapisze stan repo po początkowym pobraniu dla kompilacji. Ale wygląda na to, że powinien ponownie zapisać stan repo po udanej kompilacji na wypadek, gdyby kompilacja popełniła błąd - lub przynajmniej dała to jako opcję. Jakieś ciało ma łatwiejszy, szybszy pomysł, aby rozwiązać ten problem? – Wayne

+0

O, znalazłem widelec plugin git-hudson na github, gdzie ktoś inny zdaje się już dodawać obsługę tej sytuacji. Ściągam i buduję i spróbuję tego. Ponownie, jeśli ktoś ma lepsze rozwiązanie, proszę doradzić. Odpowiem, jeśli to rozwiązuje. – Wayne

Odpowiedz

3

A odpowiedź jest! ...

Wtyczka Git Hudson już rozwidlone przez kogoś, aby dodać tę funkcję, to działa dobrze. Mimo to musiałem usunąć źródło i naprawić kilka drobnych problemów.

Teraz działa pięknie. Kompilacja zostaje zatwierdzona, a wtyczka Git przesyła z powrotem do repozytorium bez pętli, myśląc, że ponownie się zmieniła.

Cudownie!

Jeśli ktoś jeszcze potrzebuje tego widoku, widelec tickzoom wtyczki Hudson-GIT na Githubie.com, ale sprawdź, czy została już włączona z powrotem do głównego projektu. Komendant powiedział, że jest zainteresowany i planuje połączenie widelców.

Wayne

+0

Oh. to jest fajne! Okazuje się, że wtyczka Hudson Git radzi sobie już z tą sytuacją. Opisuje to na dokumentacji i kilka dni temu był nad moją głową. Chodzi o to, by zatwierdzać tylko gałęzie "funkcyjne". Następnie serwer kompilacji najpierw łączy gałąź funkcji z gałęzią integracji, a następnie wykonuje swoją pracę. W ten sposób nigdy nie ma potrzeby, aby zautomatyzowany serwer miał nieszybkie konwersje do przodu, a zatwierdzenia odbywają się w oddziale integracyjnym w odpowiedniej kolejności. Niesamowite. Musisz pokochać moc Gita. – Wayne

5

System budowy nie powinien mieć żadnej interakcji pisać z systemu kontroli wersji. Z całą pewnością nie powinno to automatycznie zmieniać tych zmian.

Twój system kompilacji może zapytać git (na przykład przez git describe) jaka jest aktualna wersja. Wszystko inne jest zbędne i podatne na błędy.

Inną rzeczą, którą możesz wziąć pod uwagę, to nie sondowanie zmian. To wydaje się głupim sposobem działania. (Trzeba przyznać, że jestem ciężkim użytkownikiem buildbota, przywykłym do wywoływania wszystkiego w przypadku zdarzeń.)

Zapytanie git repo, które jest odpytywane, wie kiedy to się zmieni. Powinien po prostu powiedzieć systemowi CI, aby natychmiast zaczął budować kompilację. Dostajesz swoje kompilacje wcześniej, a ponieważ wszystkie są uruchomione, nie musisz siedzieć przy komputerze, wykonując wiele pracy bez żadnego powodu.

+0

Niestety, zapis musi się zdarzyć, ponieważ kompilacja musi oznaczyć wersję numerem wydania, takim jak 0.5.6.135, a także aktualizować pliki źródłowe o numerze, aby skompilowane pliki binarne miały wersję. To umożliwia śledzenie błędów z powrotem do poprawnego kodu źródłowego. Poprzednio używaliśmy SVN i ta wtyczka miała opcję "zignorowania" niektórych plików podczas odpytywania o zmiany. Więc zignorowaliśmy nasze pliki wersji. Oczywiście Git jest inny. Jeśli znasz inny sposób osiągnięcia tego samego, daj mi znać proszę. – Wayne

+0

Podoba mi się twój pomysł, żeby nie sondować zmian. Tą przeszkodą jest także unikanie nieskończonej pętli push od auto-buildu. Tak więc ta metoda musi również mieć sposób na porównanie między nimi. To skomplikowane. Więc głosowanie i porównywanie wydaje się bardziej proste. A sondowanie co 1 minutę w przypadku zmian nie jest żadnym rodzajem pracy na komputerze, który mógłby się martwić. – Wayne

+0

FYI, teraz rozumiem, dlaczego mówisz, że kompilacja nie powinna nigdy pisać do repozytorium. Mam wszystko skonfigurowane i działające, ale maszyna kompilująca CI CI zapisuje i tworzy niezatwierdzenia fastword, gdy robi to pod koniec kompilacji, podczas gdy koderowie kontynuują kodowanie i zatwierdzanie podczas kompilacji. Złożone, ale niezbędne wymagania. Zadam kolejne pytanie, aby rozwiązać ten problem. – Wayne

Powiązane problemy