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?

Author: Peter Mortensen, 2011-04-26

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.

Działa idealnie.
 176
Author: olenz,
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 .

 31
Author: docwhat,
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.

 9
Author: Wei Wang,
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:

  1. przejdź do ustawień projektu → Hooki www
  2. 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

  3. Kliknij Add Web Hook a następnie test 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.

 7
Author: etusm,
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.

  1. Install the URL Trigger Plugin
  2. przejdź do strony konfiguracji zadania i wybierz opcję Poll SCM. Ustaw wartość na * * * * *
  3. zaznacz opcję: [URLTrigger] - Poll with a URL. Teraz możesz wybrać niektóre opcje, takie jak zmiana daty modyfikacji, zawartość URL itp.
  4. w opcjach wybierz url content change, wybierz pierwszą opcję – Monitor change of content
  5. 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ł.

 4
Author: Krishnam,
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.
 3
Author: Nav,
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.

 3
Author: Adam Dymitruk,
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:

  1. 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.
  2. przejdź do lokalnego repozytorium Git, gdzie masz kod źródłowy i przejdź do folderu .git/hooks.
  3. 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
    
  4. 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 Jenkins

    jobName: Nazwa zadania budowy

    apiToken: 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"

  5. Wprowadź zmiany w kodzie źródłowym i zatwierdź kod do repozytorium.

  6. Twoim zadaniem, http://localhost:8080/jenkins/job/Gitcommittest/, powinno być budowanie.

 2
Author: Venkata Naresh Babu,
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

 1
Author: Tomas Bjerre,
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

 1
Author: jesses.co.tt,
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.

 0
Author: richardpringle,
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