Jak mogę zrobić Jenkins CI z Git trigger na push to master?
Próbuję skonfigurować Jenkins-ci dla projektu używającego Githuba. Już skonfigurowałem Jenkinsa z odpowiednimi wtyczkami. Chcę, aby Jenkins uruchamiał Skrypty kompilacji tylko wtedy, gdy ktoś w projekcie popycha do opanowania. Do tej pory udało mi się skonfigurować go tak, aby kompilacja była uruchamiana za każdym razem, gdy ktoś wypchnie się w dowolne miejsce, ale to jest zbyt szerokie. Zrobiłem to z post-receive service hooks na Git.
Czytałem wiki Jenkins i kilka samouczków, ale ten szczegół jest zaginęła... czy to ma coś wspólnego z sondażami? Czy też powinna być wykonana praca po stronie Gita, tak aby Git wyzwalał Jenkinsa tylko wtedy, gdy master
jest zmieniona?
11 answers
Jak już zauważył gezzed w swoim komentarzu, tymczasem jest dobre rozwiązanie (opisane w ankieta musi umrzeć: wyzwalanie Jenkinsa buduje się z Hooka Git):
Ustawia WYZWALACZ kompilacji zadania Jenkins na Poll SCM , ale nie określa harmonogramu.
-
Utwórz WYZWALACZ GitHub post-receive, aby powiadomić adres URL
http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>?token=<get token from git to build remotely>
Spowoduje to uruchomienie wszystkich kompilacji, które sprawdzają podany Git repozytorium.
Jednak sondaż faktycznie sprawdza, czy coś zostało zepchnięte do używanej gałęzi.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-18 21:36:07
Od wersji 0.5, Wtyczka GitHub dla Jenkins może wywołać kompilację, gdy zmiana zostanie popchnięta do GitHub .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-18 21:36:58
Zamiast zdalnie uruchamiać Kompilacje, zmień konfigurację projektu Jenkins na uruchamianie kompilacji przez ankietę.
Jenkins może przepytywać w oparciu o stały wewnętrzny lub URL. Ten ostatni jest tym, co chcesz pominąć, jeśli nie ma zmian dla tej gałęzi. Dokładnymi szczegółami są w dokumentacji . Zasadniczo wystarczy sprawdzić opcję "ankieta SCM", pozostawić sekcję harmonogram pustą i ustawić zdalny adres URL, aby trafić JENKINS_URL / praca / nazwa / ankieta.
Jeśli masz zabezpieczone środowisko Jenkins, w przeciwieństwie do /build
, URL /polling
wymaga uwierzytelnienia. Instrukcje tutaj zawierają szczegóły. Na przykład, mam Hook GitHub Post-Receive idący do username:apiToken@JENKIS_URL/job/name/polling
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-18 21:38:38
Dla GitLab , wykonaj następujące kroki:
- przejdź do ustawień projektu → Hooki www
-
Wprowadź adres URL "Build Now" z projektu Jenkins jako adres URL zdarzenia Push:
http://server.com/jenkins/job/project_name/build?delay=0sec
Na przykład - Kliknij
Add Web Hook
a następnietest hook
Po zatwierdzeniu do repozytorium, hook sieciowy jest wyzwalany i tworzony jest build. Pamiętaj, aby ustawić przestrzeń roboczą Jenkins na delete workspace before each build
, aby uzyskać nową kopię nowego kodu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-18 21:42:14
Nie związane z Gitem, ale poniżej pomogę w szczegółowej konfiguracji zadania Jenkins za pomocą Mercurial. Może pomóc innym z podobnym problemem.
- Install the URL Trigger Plugin
- przejdź do strony konfiguracji zadania i wybierz opcję
Poll SCM
. Ustaw wartość na* * * * *
- zaznacz opcję:
[URLTrigger] - Poll with a URL
. Teraz możesz wybrać niektóre opcje, takie jak zmiana daty modyfikacji, zawartość URL itp. - w opcjach wybierz url content change, wybierz pierwszą opcję –
Monitor change of content
- Zapisz zmiany.
Teraz uruchom pewne zmiany w repozytorium Mercurial przez kilka testów kontrolnych.
Sprawdź, czy zadanie Jenkinsa działa teraz, wykrywając zmiany SCM. Gdy kompilacja zostanie uruchomiona z powodu zmian Mercurialnych, zobaczysz tekst Started by an SCM change
. W przeciwnym razie użytkownik, który ręcznie go uruchomił.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-18 21:39:58
Mam nadzieję, że to pomoże: Jak uruchomić kompilację Jenkins na git commit
To tylko kwestia użycia curl do uruchomienia zadania Jenkinsa przy użyciu hooków Git dostarczonych przez Git.
Polecenie curl http://localhost:8080/job/someJob/build?delay=0sec
może uruchomić zadanie Jenkins, gdzie someJob
jest nazwą zadania Jenkins.
Wyszukaj folder "Hooki" w ukrytym pliku .folder git. Zmień nazwę " post-commit.przykładowy "plik do" Post-commit". Otwórz go za pomocą Notatnika, Usuń wiersz": Nothing " i wklej powyższe polecenie w to.
To wszystko. Za każdym razem, gdy wykonujesz commit, Git uruchomi polecenia POST-commit zdefiniowane w pliku.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-18 21:41:12
Musisz określić gałąź. Domyślnie słucha czegokolwiek. Zobacz wpis na bloguwtyczki Git i Maven.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-21 16:36:22
Ciągła integracja z Jenkins, po wypchnięciu kodu do repozytorium z Komendy Git / GUI:
- Utwórz zadanie w Jenkins z tylko nazwą zadania i wybierz typ projektu freestyle. Kliknij OK . Następna strona nic nie dodaje - wystarczy kliknąć Zapisz.
- przejdź do lokalnego repozytorium Git, gdzie masz kod źródłowy i przejdź do folderu
.git/hooks
. -
Folder
hooks
zawiera kilka plików. Sprawdź "post-commit". Jeśli nie istnieje, utwórz plik "post-commit" bez rozszerzenia pliku:C:\work\test\\.git\hooks\post-commit
-
Edytuj plik "Post-commit" za pomocą poniższego polecenia. Upewnij się, że jest on obecny w folderze local source code hooks.
curl -u userName:apiToken -X POST http://localhost:8080/jenkins/job/jobName/build?token=apiToken
Przykład:
curl -u admin:f1c55b3a07bb2b69b9dd549e96898384 -X POST http://localhost:8080/jenkins/job/Gitcommittest/build?token=f1c55b3a07bb2b69b9dd549e96898384
5.
userName
: Nazwa użytkownika JenkinsjobName
: Nazwa zadania budowyapiToken
: aby uzyskać token API, Przejdź do strony Użytkownika Jenkins (w prawym górnym rogu interfejsu). Jest on dostępny w menu "Konfiguracja" po lewej stronie strona: "Pokaż token API" Wprowadź zmiany w kodzie źródłowym i zatwierdź kod do repozytorium.
Twoim zadaniem,
http://localhost:8080/jenkins/job/Gitcommittest/
, powinno być budowanie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-18 21:45:23
Wtyczka Generic Webhook Trigger może być skonfigurowana za pomocą filtrów, aby to osiągnąć.
Po skonfigurowaniu z
- zmienna o nazwie
ref
i wyrażeniu$.ref
. - filtr z tekstem
$ref
i filtrowanie wyrażeń jak^refs/heads/master$
.
Wtedy to zadanie uruchomi się za każdym naciśnięciem master
. Żadnych sondaży.
Prawdopodobnie potrzebujesz więcej wartości z webhooka, aby faktycznie wykonać kompilację. Wystarczy dodać więcej zmiennych za pomocą JSONPath, aby wybrać to, co potrzeba.
Jest kilka przypadków użycia tutaj: https://github.com/jenkinsci/generic-webhook-trigger-plugin/tree/master/src/test/resources/org/jenkinsci/plugins/gwt/bdd
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-04 13:54:48
W mojej obecnej organizacji, nie robimy tego w master, ale robimy to zarówno na develop jak i release / Branch (używamy Git Flow), w celu generowania kompilacji migawek.
Ponieważ używamy potoku wielu gałęzi, robimy to w pliku Jenkinsfile ze składnią when {} ...
stage {
when {
expression {
branch 'develop'
}
}
}
To jest szczegółowo w tym wpisie na blogu: https://jenkins.io/blog/2017/01/19/converting-conditional-to-pipeline/#longer-pipeline
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-06 15:26:33
Użyj wtyczki pull request builder: https://wiki.jenkins-ci.org/display/JENKINS/GitHub + pull+request+builder + plugin
To naprawdę proste. Następnie możesz skonfigurować GitHub webhooki, aby wyzwalały Kompilacje.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-31 19:50:49