Mam podmoduł w projekcie w Jenkins. Włączyłem zaawansowane ustawienie rekurencyjnej aktualizacji modułów podrzędnych.
Gdy uruchamiam kompilację, widzę, że obszar roboczy zawiera pliki z modułu podrzędnego. Problem w tym, że wydaje się, że jest to pierwsza wersja podmodułu. Kiedy wypycham zmiany (repozytorium hostowane na GitHub), Jenkins nie wydaje się aktualizować modułu podrzędnego, aby uzyskać odpowiednie zmiany. Czy ktoś to widział?
Jest to omówione w dokumentacji wtyczki Git w witrynie Jenkins w sekcji: Recursive submodules .
fragmentPrzykład
Na ekranie konfiguracji zadania, w sekcji Zarządzanie kodami źródłowymi, pociągnij przycisk Dodaj w dół i wybierz opcję „Zaawansowane zachowanie podmodułów”.
Następnie wybierz „Rekurencyjnie aktualizuj moduły podrzędne”:
źródło
Czy wiesz, że repozytorium Git zawsze odnosi się do określonej wersji modułu podrzędnego? Jenkins nie zamierza automatycznie zmieniać wersji.
Jeśli chcesz korzystać z nowszej wersji modułu podrzędnego, musisz to zrobić w swoim lokalnym repozytorium Git:
Kiedy zrobisz to w ten sposób, Jenkins sprawdzi dokładnie tę samą wersję podmodułu podczas kompilacji. Jenkins nie decyduje samodzielnie, której wersji podmodułu użyć. Jest to podstawowa różnica między podmodułami Git a zewnętrznymi programami SVN.
Możesz przeczytać dobre referencje na temat modułów podrzędnych, np . Http://progit.org/book/ch6-6.html .
źródło
W końcu natknąłem się na sposób, aby to zrobić i jest to proste.
Problem:
Początkowy klon z poświadczeniami działa prawidłowo, ale kolejne
submodule
klonowanie kończy się niepowodzeniem z nieprawidłowymi poświadczeniami.Source Code Management >> Additional Behaviours >> Advanced sub-modules behaviours
:: powoduje błąd poświadczeń.git submodule update --init
wExecute Shell
sekcji również kończy się niepowodzeniem z błędem poświadczeń.Rozwiązanie:
Używam
jenkins-1.574
.Build Environment >> SSH Agent
pole.Source Code Management
sekcjiZaktualizuj moduły podrzędne w
Execute Shell
sekcjiOto zrzut ekranu
źródło
Wygląda na to, że znalazłem rozwiązanie:
Dodałem krok kompilacji, aby wykonać następujące polecenia powłoki:
źródło
git submodule update --init --recursive
Jeśli używasz modułu Jenkins Git, możesz ustawić go na „Wyczyść obszar roboczy przed budową”, w ten sposób zawsze otrzyma właściwy moduł podrzędny.
źródło
Używam skryptowego potokowania z wtyczką do kasy. Jeśli chcesz, aby moduły podrzędne były takie same jak w repozytorium, po prostu wyłącz opcję trackingSubmodules w następujący sposób:
źródło