Jak wspomniano w „ Polling must die: triggering Jenkins builds from a git hook ”, możesz powiadomić Jenkinsa o nowym zatwierdzeniu:
Dzięki najnowszej wtyczce Git 1.1.14 (którą właśnie opublikowałem) możesz teraz zrobić to łatwiej> łatwiej, wykonując po prostu następujące polecenie:
curl http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>
Spowoduje to przeskanowanie wszystkich zadań skonfigurowanych do pobierania określonego adresu URL, a jeśli są one również skonfigurowane z odpytywaniem, natychmiast uruchomi sondowanie (a jeśli znajdzie zmianę wartą kompilacji, zostanie uruchomiona kompilacja po kolei. )
Dzięki temu skrypt pozostaje niezmieniony, gdy zadania pojawiają się i znikają w Jenkins.
Lub jeśli masz wiele repozytoriów w ramach jednej aplikacji hosta repozytorium (takiej jak Gitosis), możesz udostępnić pojedynczy skrypt przechwytujący po odbiorze ze wszystkimi repozytoriami. Wreszcie, ten adres URL nie wymaga uwierzytelniania nawet w przypadku zabezpieczonego Jenkinsa, ponieważ serwer nie używa bezpośrednio niczego, co przesyła klient. Uruchamia odpytywanie w celu sprawdzenia, czy nastąpiła zmiana, zanim faktycznie rozpocznie kompilację.
Tak jak wspomniano tutaj , upewnij się, że używasz właściwego adresu dla swojego serwera Jenkins:
ponieważ używamy Jenkinsa jako samodzielnego serwera WWW na porcie 8080, adres URL powinien być bez rozszerzenia /jenkins
przykład:
http://jenkins:8080/git/notifyCommit?url=git@gitserver:tools/common.git
Aby wzmocnić ten ostatni punkt, ptha dodaje w komentarzach :
Może to oczywiste, ale miałem problemy z:
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, w naszym przypadku pominąłem protokółssh://
i nie zadziałał.
Możesz także użyć prostego haka po odbiorze, takiego jak „ Kompilacje oparte na wypychaniu przy użyciu Jenkinsa i GIT ”
#!/bin/bash
/usr/bin/curl --user USERNAME:PASS -s \
http://jenkinsci/job/PROJECTNAME/build?token=1qaz2wsx
Skonfiguruj swoje zadanie Jenkins, aby móc „wyzwalać kompilacje zdalnie” i używać tokena uwierzytelniania (1qaz2wsx
w tym przykładzie).
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.
Chcę sprawdzić, czy zmiana jest ustawiona, czy jest tam przynajmniej jeden plik java, którego kompilacja powinna się rozpocząć.
Załóżmy, że programiści zmienili tylko pliki XML lub pliki właściwości, a następnie kompilacja nie powinna się rozpocząć.
Zasadniczo skrypt kompilacji może:
- umieść notatki dotyczące `` kompilacji '' (patrz
git notes
) przy pierwszym wywołaniu
- podczas kolejnych wywołań, pobierz listę zatwierdzeń między
HEAD
kandydatem na gałąź do zbudowania a zatwierdzeniem, do którego odwołuje się polecenie git notes
'build' (git show refs/notes/build
) git diff --name-only SHA_build HEAD
.
- Twój skrypt może przeanalizować tę listę i zdecydować, czy musi kontynuować kompilację.
- w każdym razie utwórz / przenieś swój
git notes
„ build
” do HEAD
.
Maj 2016: cwhsu wskazuje w komentarzach następujący możliwy adres URL:
możesz po prostu użyć, curl --user USER:PWD http://JENKINS_SERVER/job/JOB_NAME/build?token=YOUR_TOKEN
jeśli ustawisz konfigurację wyzwalacza w swoim elemencie
Czerwiec 2016, polaretto zwraca uwagę w komentarzach :
Chciałem dodać, że dzięki niewielkiemu skryptowi powłoki można uniknąć ręcznej konfiguracji adresu URL, szczególnie jeśli masz wiele repozytoriów we wspólnym katalogu.
Na przykład użyłem tych rozszerzeń parametrów, aby uzyskać nazwę repozytorium
repository=${PWD%/hooks};
repository=${repository##*/}
a następnie użyj go jak:
curl $JENKINS_URL/git/notifyCommit?url=$GIT_URL/$repository