2011-11-18 12 views
8

Próbuję zaimplementować zmodyfikowany przepływ pracy programu Integration-Manager podobny do opisanego w artykule ProGit.Integracja-Manager Git Workflow przy użyciu Jenkins/Hudson

Diagram of the Integration-Manager workflow

zamiast integration manager wykonywania scala, chcę programistom łączyć lokalnie przed opublikowaniem ich kod i chcę Quality Gateway który wymusza nasze ciągłe normy integracyjne, takie jak minimalny poziom pokrycia kodu i 100 % testów przechodzi, zanim zezwolimy, by kod wszedł do błogosławionego repozytorium do sprawdzenia przez innych programistów. Chodzi o to, że kod w błogosławionym repozytorium zawsze spełnia minimalny standard, który definiujemy i zawsze budujemy.

Chcę, aby Jenkins pełnił rolę bramy jakości, a jedynie przekazywał kod do błogosławionego repozytorium, gdy kompilacja się powiedzie.

Do tej pory skonfigurowałem system, aby dostępne były następujące repozytorium publiczne: błogosławione repozytorium, repozytorium na serwerze kompilacji dla Jenkinsa, które jest nagim repozytywnym dostępem dostępnym przez gitosis i oczywiście własne repozytorium dewelopera .

Mam programistów wycofujących się z błogosławionego repo i popychając do repo integracji. Teraz staram się skłonić Jenkinsa do przekazania udanych buildów z repozytorium integracyjnego do błogosławionego repo.

Do tej pory jedyną dostępną opcją, którą widziałem, podobną do tej, którą próbuję osiągnąć, jest opcja "Push Only If Build Succeeds" w ustawieniach Wydawcy Git dla działań związanych z budowaniem postów w konfiguracji projektu Jenkinsa. Jednak te opcje nie pozwalają określić adresu URL przycisku lub pilota, do którego należy przejść.

Jak rozumiem, ustawienia Wydawcy Gita popchnęłyby repozytorium Jenkinsa w jego przestrzeń roboczą z powrotem do publicznego repozytorium Jenkinsa, ale chcę popchnąć do innego zdalnego, błogosławionego repozytorium.

Czy ktoś ma jakieś sugestie, jak mogę skłonić Jenkinsa do popierania błogosławionego repo?

EDIT 0: Próbowałem umieszczenie postu krok, aby wykonać polecenie Push do mojego błogosławionego repozytorium. Wydaje się działać, ponieważ nie ma błędów. Jednak żadne zmiany są pchane i dzienniki pokazują, że git myśli wszystko jest aktualne:

[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESSFUL 
[INFO]  ------------------------------------------------------------------------ 
[INFO] Total time: 1 minute 7 seconds 
[INFO] Finished at: Fri Nov 18 16:10:50 UTC 2011 
[INFO] Final Memory: 19M/45M 
[INFO] ------------------------------------------------------------------------ 
channel stopped 
[My Project] $ /bin/sh -xe /tmp/hudson5604254372179801803.sh + git push [email protected]:my-project.git --all 
Everything up-to-date 

nie wiem dlaczego git myśli, nie ma nic do pchania, bo tam na pewno jest.

Odpowiedz

1

Czy rozważałeś dodanie do obiegu pracy Gerrit? Zmiany są przekazywane do Gerrit, a następnie CI uruchamia kompilację i zgłasza testy. Można go skonfigurować tak, aby inne zatwierdzenia (takie jak autoryzowane recenzje kodu) były potrzebne przed scaleniem z błogosławionym repo. EGit używa go w ich rozwoju, http://egit.eclipse.org/r/. Istnieją również inne dyskusje na temat tego przepływu pracy, na przykład blog alblue.

+0

Wygląda interesująco, ale jedyną rzeczą, która dodaje, że nasz obecny proces nie ma, jest sformalizowany proces recenzji. Nasze projekty są zmanipulowane, więc jeśli przejdą przez nas znaną wersję, zdadzą testy i inne wymagania, które zdefiniowaliśmy.Nie wydaje się, aby dodać wystarczająco dużo (do naszego procesu), aby usprawiedliwić posiadanie innego narzędzia komplikującego nasze środowisko. Będę pamiętać, że zmieniają się nasze potrzeby, dzięki! – chrisbunney

+0

Rozumiem potrzebę ograniczenia złożoności :-) Chodzi mi o to, że dodaje ona zarówno recenzję, jak i zgłasza wyniki testu CI/Test dla każdej zmiany, zanim zostanie zatwierdzona do twojego błogosławionego repo. –

+0

Tak, to będzie dobrze, gdy dojdziemy do tego etapu :) – chrisbunney

2

Co powiesz na użycie funkcji Jenkins "Push Only If Build Succeeds", z hakiem post-commit lub post-receive w repozytorium integracji, aby przesłać do błogosławionego repozytorium za każdym razem, gdy Jenkins popchnie po udanej kompilacji?

+0

To wygląda na to, jak iść, dzięki – chrisbunney

+0

+1, choć warto zauważyć, że to tylko popchnie gałąź, która wywołała zmianę. Jeśli przekazałeś tagi lub zmiany do więcej niż jednego oddziału, nie zostaną one wypchnięte (Obecnie używamy 1 projektu na repozytorium, zamiast tworzyć 1 projekt na oddział, ponieważ tworzymy wiele oddziałów, które chcemy przeforsować ciągłą integrację) – chrisbunney

Powiązane problemy