Jak zdalnie wyzwolić kompilację z Jenkinsa?
Jak skonfigurować przechwytywanie po zatwierdzeniu przez Git?
Moim wymaganiem jest to, że za każdym razem, gdy w repozytorium Git zostaną wprowadzone zmiany dla określonego projektu, automatycznie rozpocznie się kompilacja Jenkinsa dla tego projektu.
W sekcji budowy wyzwalaczy Jenkinsa wybrałem zdalnie kompilację wyzwalacza.
W .git
katalogu hooks jest tam, gdzie musimy skonfigurować plik po zatwierdzeniu.
Nie wiem, jak uruchomić stamtąd kompilację (znam część, w której powinniśmy użyć polecenia curl).
curl cmbuild.aln.com/jenkins/view/project name/job/myproject/buildwithparameters?Branch=feat-con
Umieściłem to polecenie w moim katalogu hooks serwera git (punkt zaczepienia po zatwierdzeniu).
Za każdym razem, gdy zmiany zachodzą w repozytorium, uruchamia się automatyczne budowanie.
Chcę sprawdzić w zestawie zmian, czy w co najmniej jednym pliku java znajduje się kompilacja powinna się rozpocząć.
Załóżmy, że programiści zmienili tylko pliki xml lub pliki właściwości, których kompilacja nie powinna się rozpocząć.
Wraz z xml
załóżmy, że te .java
pliki są tam budowa powinna rozpocząć.
Odpowiedzi:
Jak wspomniano w „ Polling must die: triggering Jenkins builds from a git hook ”, możesz powiadomić Jenkinsa o nowym zatwierdzeniu:
Tak jak wspomniano tutaj , upewnij się, że używasz właściwego adresu dla swojego serwera Jenkins:
Aby wzmocnić ten ostatni punkt, ptha dodaje w komentarzach :
Możesz także użyć prostego haka po odbiorze, takiego jak „ Kompilacje oparte na wypychaniu przy użyciu Jenkinsa i GIT ”
Jest to jednak skrypt specyficzny dla projektu i autor podaje sposób na jego uogólnienie.
Pierwsze rozwiązanie jest łatwiejsze, ponieważ nie zależy od uwierzytelnienia ani konkretnego projektu.
Zasadniczo skrypt kompilacji może:
git notes
) przy pierwszym wywołaniuHEAD
kandydatem na gałąź do zbudowania a zatwierdzeniem, do którego odwołuje się poleceniegit notes
'build' (git show refs/notes/build
)git diff --name-only SHA_build HEAD
.git notes
„build
” doHEAD
.Maj 2016: cwhsu wskazuje w komentarzach następujący możliwy adres URL:
Czerwiec 2016, polaretto zwraca uwagę w komentarzach :
źródło
yourRepo.git/hooks/post-receive
curl http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>
. Url parametr powinien pasować dokładnie to, co masz w repozytorium URL swojej pracy Jenkins. Kopiując przykłady pominąłem protokół, w naszym przypadku ssh: // i nie zadziałał.Mam nadzieję, że to pomoże: http://nrecursions.blogspot.in/2014/02/how-to-trigger-jenkins-build-on-git.html
To tylko kwestia użycia
curl
do wywołania zadania Jenkinsa za pomocą haków git dostarczonych przez git.Komenda
może uruchomić zadanie Jenkinsa, gdzie
someJob
jest nazwa zadania Jenkinsa.Wyszukaj
hooks
folder w ukrytym folderze .git. Zmień nazwępost-commit.sample
pliku napost-commit
. Otwórz go za pomocą Notatnika, usuń: Nothing
linię i wklej do niej powyższe polecenie.Otóż to. Za każdym razem, gdy wykonujesz zatwierdzenie, Git wyzwoli polecenia po zatwierdzeniu zdefiniowane w pliku.
źródło
Tak jak poprzednia odpowiedź pokazała przykład tego, jak może wyglądać pełny punkt zaczepienia, oto kod mojego działającego zaczepu po odbiorze:
W tym przypadku uruchamiam zlecenia Jenkinsa tylko wtedy, gdy pcham do mastera, a nie do innych gałęzi.
źródło
Chcę dodać do powyższych odpowiedzi, że staje się to trochę trudniejsze, jeśli autoryzacja Jenkins jest włączona.
Po włączeniu otrzymałem komunikat o błędzie, że anonimowy użytkownik potrzebuje uprawnień do odczytu.
Widziałem dwa możliwe rozwiązania:
1: Zmiana haka na:
2: ustawianie uprawnień na podstawie projektu.
Poprzednie rozwiązanie ma tę wadę, że musiałem ujawnić swoje hasło w pliku przechwytującym. Niedopuszczalne w moim przypadku.
Drugi działa dla mnie. W globalnych ustawieniach uwierzytelniania musiałem włączyć Ogólne> Odczyt dla użytkownika anonimowego. W projekcie, który chciałem uruchomić, musiałem włączyć Praca> Tworzenie i Praca> Czytaj dla anonimowych.
To wciąż nie jest idealne rozwiązanie, ponieważ teraz możesz zobaczyć projekt w Jenkins bez logowania. Może istnieć jeszcze lepsze rozwiązanie przy użyciu pierwszego podejścia z logowaniem przez http, ale nie rozgryzłem tego.
źródło