it-swarm.com.de

Wie kann ich Jenkins CI mit Git-Trigger auf Pushs zum Master machen?

Ich versuche, Jenkins-ci für ein Projekt mit GitHub einzurichten. Ich habe Jenkins bereits mit den entsprechenden Plugins eingerichtet. Ich möchte, dass Jenkins Build-Skripte nur dann ausführt, wenn jemand im Projekt auf Master drängt. Bisher konnte ich es so einstellen, dass ein Build immer dann ausgelöst wird, wenn jemand auf etwas drängt, aber das ist zu weit gefasst. Ich habe dies mit Post-Receive-Service-Hooks auf Git gemacht.

Ich habe das Jenkins-Wiki und ein paar Tutorials gelesen, aber dieses spezielle Detail fehlt ... hat es vielleicht etwas mit Umfragen zu tun? Oder sollte auf der Git-Seite gearbeitet werden, damit Git nur Jenkins auslöst, wenn master geändert wird?

199
Ziggy

Wie bereits von gezzed in seinem Kommentar angemerkt, gibt es mittlerweile eine gute Lösung (beschrieben in Polling muss sterben: Jenkins-Builds von einem Git-Hook auslösen):

  • Setzen Sie den Build-Trigger des Jenkins-Jobs auf SCM abfragen , geben Sie jedoch nicht an ein Zeitplan.

  • Erstellen Sie einen GitHub-Trigger nach dem Empfang, um die URL zu benachrichtigen

    http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>?token=<get token from git to build remotely>
    
  • Dies löst alle Builds aus, die das angegebene Git-Repository abfragen.

  • Bei der Abfrage wird jedoch tatsächlich überprüft, ob in den verwendeten Zweig etwas verschoben wurde.

Es funktioniert perfekt.

185
olenz

Ab Version 0.5 kann das GitHub-Plugin für Jenkins einen Build auslösen, wenn eine Änderung an GitHub vorgenommen wird .

32
docwhat

Anstatt Builds remote auszulösen , ändern Sie Ihre Jenkins-Projektkonfiguration so, dass Builds durch Abfragen ausgelöst werden.

Jenkins können basierend auf einer festen internen oder einer URL abfragen. Letzteres ist, was Sie Builds überspringen möchten, wenn es für diesen Zweig keine Änderungen gibt. Die genauen Details finden Sie in der Dokumentation . Im Wesentlichen müssen Sie nur die Option "Poll SCM" aktivieren, den Abschnitt "Schedule" leer lassen und eine Remote-URL festlegen, die JENKINS_URL/job/name/polling lautet.

Wenn Sie eine gesicherte Jenkins-Umgebung haben, die sich von /build Unterscheidet, ist für die URL /polling Eine Authentifizierung erforderlich. Die Anweisungen hier haben Details. Ich habe zum Beispiel einen GitHub Post-Receive-Hook, der zu username:[email protected]_URL/job/name/polling Wechselt.

9
Wei Wang

Verwenden Sie für GitLab diese Schritte:

  1. Gehen Sie zu den Einstellungen Ihres Projekts → Web Hooks
  2. Geben Sie die URL "Jetzt erstellen" aus Ihrem Jenkins-Projekt als Push-Ereignis-URL ein:

    http://server.com/jenkins/job/project_name/build?delay=0sec Zum Beispiel

  3. Klicken Sie auf Add Web Hook Und dann auf test hook

Jedes Mal, wenn Sie ein Commit für das Repository ausführen, wird der Web-Hook ausgelöst und ein Build erstellt. Stellen Sie sicher, dass Ihr Jenkins-Arbeitsbereich auf delete workspace before each build Eingestellt ist, damit Sie eine neue Kopie des neuen Codes erhalten.

8
etusm

Hat nichts mit Git zu tun, aber ich werde unten bei der Jenkins-Jobkonfiguration mit Mercurial ausführlich helfen. Es kann anderen mit einem ähnlichen Problem helfen.

  1. Installieren Sie das URL Trigger Plugin
  2. Gehen Sie zur Job-Konfigurationsseite und wählen Sie Poll SCM Möglichkeit. Setzen Sie den Wert auf * * * * *
  3. Aktivieren Sie die Option: [URLTrigger] - Poll with a URL. Jetzt können Sie einige Optionen wie Änderungsdatum, URL-Inhalt usw. auswählen.
  4. Wählen Sie in den Optionen URL-Inhalt ändern, erste Option auswählen - Monitor change of content
  5. Speichern Sie die Änderungen.

Lösen Sie jetzt einige Änderungen am Mercurial-Repository durch einige Test-Check-Ins aus.

Stellen Sie sicher, dass der Jenkins-Job jetzt ausgeführt wird, indem Sie die SCM-Änderungen erkennen. Wenn der Build aufgrund von Mercurial-Änderungen ausgeführt wird, wird der Text Started by an SCM change. Sonst der Benutzer, der es manuell gestartet hat.

4
Krishnam

Ich hoffe das hilft: Wie man einen Jenkins Build auf Git Commit auslöst

Es ist nur eine Frage der Verwendung von curl, um einen Jenkins-Job mit den von Git bereitgestellten Git-Hooks auszulösen.

Der Befehl curl http://localhost:8080/job/someJob/build?delay=0sec kann einen Jenkins-Job ausführen, wobei someJob der Name des Jenkins-Jobs ist.

Suchen Sie in Ihrem versteckten .git-Ordner nach dem Ordner "hooks". Benennen Sie die Datei "post-commit.sample" in "post-commit" um. Öffnen Sie es mit dem Editor, entfernen Sie die Zeile ": Nothing" und fügen Sie den obigen Befehl ein.

Das ist es. Bei jedem Commit löst Git die in der Datei definierten Post-Commit-Befehle aus.

3
Nav

Fortlaufende Integration mit Jenkins, nachdem der Code vom Git-Befehl/GUI in das Repository verschoben wurde:

  1. Erstellen Sie einen Job in Jenkins, der nur den Jobnamen enthält, und wählen Sie den Typ des Projekt-Freistils aus. Klicken OK. Auf der nächsten Seite wird nichts hinzugefügt. Klicken Sie einfach auf Save.
  2. Gehen Sie zu Ihrem lokalen Git-Repository, in dem Sie den Quellcode haben, und navigieren Sie zu .git/hooks Mappe.
  3. Der Ordner hooks enthält die wenigen Dateien. Überprüfen Sie, ob das "Post-Commit" durchgeführt wurde. Wenn nicht vorhanden, erstellen Sie eine Datei mit dem Zusatz "post-commit" ohne Dateierweiterung:

    C:\work\test\\.git\hooks\post-commit
    
  4. Bearbeiten Sie die Datei "post-commit" mit dem folgenden Befehl. Stellen Sie sicher, dass es in Ihrem lokalen Quellcode-Hook-Ordner vorhanden ist.

    curl -u userName:apiToken -X POST http://localhost:8080/jenkins/job/jobName/build?token=apiToken
    

    Beispiel:

    curl -u admin:f1c55b3a07bb2b69b9dd549e96898384 -X POST http://localhost:8080/jenkins/job/Gitcommittest/build?token=f1c55b3a07bb2b69b9dd549e96898384
    

    5.

    userName: Jenkins Benutzername

    jobName: Jobname des Builds

    apiToken: Um Ihr API-Token zu erhalten, rufen Sie Ihre Jenkins-Benutzerseite auf (oben rechts in der Benutzeroberfläche). Es ist im Menü "Konfigurieren" auf der linken Seite verfügbar: "API-Token anzeigen".

  5. Nehmen Sie Änderungen in Ihrem Quellcode vor und übertragen Sie den Code in das Repository.

  6. Deine Arbeit, http://localhost:8080/jenkins/job/Gitcommittest/, sollte bauen.

3

Sie müssen den Zweig angeben. Standardmäßig hört es auf alles. Siehe den Blog-Beitrag Hudson: Git- und Maven-Plugins.

3
Adam Dymitruk

Generic Webhook Trigger Plugin kann mit Filtern konfiguriert werden, um dies zu erreichen.

Bei Konfiguration mit

  • Eine Variable mit dem Namen ref und Ausdruck $.ref.
  • Ein Filter mit Text $ref und Filterausdruck wie ^refs/heads/master$.

Dieser Job wird dann für jeden Push to master ausgelöst. Keine Umfrage.

Sie möchten wahrscheinlich mehr Werte vom Webhook, um den Build tatsächlich auszuführen. Fügen Sie mit JSONPath einfach weitere Variablen hinzu, um auszuwählen, was Sie benötigen.

Hier gibt es einige Anwendungsfälle: https://github.com/jenkinsci/generic-webhook-trigger-plugin/tree/master/src/test/resources/org/jenkinsci/plugins/gwt/bdd =

2
Tomas Bjerre

In meiner aktuellen Organisation tun wir dies nicht in master, sondern in Develop und Release/Branches (wir verwenden Git Flow), um Snapshot-Builds zu generieren.

Da wir eine Pipeline mit mehreren Verzweigungen verwenden, tun wir dies in der Jenkins-Datei mit der Syntax , wenn {} ...

stage {
    when { 
        expression { 
            branch 'develop'
        }
    }
}

Dies wird in diesem Blog-Beitrag beschrieben: https://jenkins.io/blog/2017/01/19/converting-conditional-to-pipeline/#longer-pipeline

1
jesses.co.tt

Die obigen Antworten sind richtig, aber ich spreche sie an, die wegen ihrer Einfachheit Neulinge sind

speziell zum Setzen des Build-Triggers für die Pipeline:

Stellen Sie sich vor, Sie haben zwei Github-Zweige: 1.master, 2.dev und Jenkinsfile (in denen das Pipeline-Skript geschrieben ist) und andere Dateien sind für jeden Zweig verfügbar

Neues Pipeline-Projekt konfigurieren (für Entwicklungszweig)

## 1.Code-Integration mit Git-Plugin und Cron-basiertem Ansatz Das vorausgesetzte Git-Plugin sollte installiert und mit Ihrem Namen und Ihrer E-Mail-Adresse konfiguriert sein

  1. Allgemeiner Abschnitt. Aktivieren Sie das Kontrollkästchen "Dieses Projekt ist parametrisiert" und fügen Sie Name-SBRANCH-Standardwert-"refs/remotes/Origin/dev" hinzu.
  2. Abschnitt "Trigger erstellen": Aktivieren Sie das Kontrollkästchen "SCM abfragen" und planen Sie nach Bedarf, um Commits zu überprüfen, z. B. "*/1 * * * *", die jede Minute überprüft werden sollen
  3. Pipeline-Definitionsabschnitt. Wählen Sie - Pipeline-Skript aus SCM -> Git auswählen -> URL für AddRepository -> Git-Anmeldeinformationen hinzufügen -> Erweitert auswählen -> Name hinzufügen - Origin, RefSpec - '+ refs/heads/dev: refs/remotes/Origin/dev '(dev is github branch) -> Zu erstellende Zweige - $ {SBRANCH} (Parametername ab Referenzpunkt 1) -> Script Path -> Jenkinsfile -> Lightweightcheckout deaktivieren
  4. Übernehmen—> Speichern

## 2.Code-Integration: Github-Plugin und Webhook-Ansatz Voraussetzung Das Github-Plugin sollte installiert und der Github-Server konfiguriert sein, andernfalls sollte die Verbindung getestet werden Beachten Sie die folgende Konfiguration

Konfigurieren Sie das Github-Plugin mit einem Konto bei Jenkins

GitHub-Bereich Github-Server hinzufügen, falls nicht vorhanden API-URL: https://api.github.com Anmeldeinformationen: Fügen Sie geheimen Text mit dem Wert Persönliches Zugriffstoken (Generate it) hinzu (Klicken Sie auf die Schaltfläche Hinzufügen, um den Typ geheimer Text auszuwählen) Von Ihren Github-Konten aus -> Einstellungen -> Entwicklereinstellungen -> Persönliches Zugriffstoken -> Token hinzufügen -> Bereiche prüfen -> Token kopieren) Verbindung testen -> Überprüfen Sie, ob eine Verbindung zu Ihrem Github-Konto besteht. Aktivieren Sie das Kontrollkästchen mit Haken verwalten Wählen Sie im vorherigen Unterabschnitt nur den vorherigen Berechtigungsnachweis für "Shared Secret" aus.

Fügen Sie den Webhook hinzu, wenn er nicht von Ihrem Repository hinzugefügt wurde

  1. Gehen Sie zur Github-Repository-Einstellung -> Webhook hinzufügen -> URL hinzufügen
    http: // Public_IP: Jenkins_PORT/github-webhook /
  2. Oder wenn Sie Public_IP nicht haben, verwenden Sie ngrok . Installieren, authentifizieren, öffentliche IP-Adresse vom Befehl ./ngrok http 80 abrufen (verwenden Sie Ihren jenkins_port) und Webhook hinzufügen -> URL hinzufügen http: // Ngrok_IP/github-webhook /
  3. Testen Sie es, indem Sie Nutzdaten von der Webhook-Seite liefern und prüfen Sie, ob Sie den Status 200 erhalten oder nicht.

Wenn Sie ein Plugin für Github Pull-Anfragen haben, konfigurieren Sie es auch mit der veröffentlichten Jenkins-URL.

  1. Allgemeiner Abschnitt. Checkbox - 'Github-Projekt' Projekt-URL hinzufügen - (Github-Link endet mit '.git /')
  2. Allgemeiner Abschnitt. Aktivieren Sie das Kontrollkästchen "Dieses Projekt ist parametrisiert" und fügen Sie Name-SBRANCH-Standardwert-"refs/remotes/Origin/dev" hinzu.
  3. Build triggers.section.Check Checkbox - 'GitHub Hook Trigger für GITScm Polling'
  4. Pipeline def'n section: Select - Pipeline script from SCM -> select git -> addRepository URL -> add git credentials -> select advanced -> add Name- Origin, RefSpec- '+ refs/heads/dev: refs/remotes/Origin/dev '(dev ist ein Github-Zweig) -> Zu erstellende Zweige - $ {SBRANCH} (Parametername ab Referenzpunkt 1) -> Skriptpfad -> Jenkins-Datei -> Deaktivieren Sie das Kontrollkästchen Lightweightcheckout
  5. Übernehmen—> Speichern
1
Akshay Shikre

Verwenden Sie das Pull-Request-Builder-Plugin: https://wiki.jenkins-ci.org/display/JENKINS/GitHub+pull+request+builder+plugin

Es ist wirklich unkompliziert. Sie können dann GitHub-Webhooks einrichten, um Builds auszulösen.

0
richardpringle