Wie unter " Polling muss sterben: Auslösen von Jenkins-Builds über einen Git-Hook " erwähnt, können Sie Jenkins über ein neues Commit benachrichtigen:
Mit dem neuesten Git-Plugin 1.1.14 (das ich gerade erst veröffentlicht habe) können Sie dies jetzt einfacher tun, indem Sie einfach den folgenden Befehl ausführen:
curl http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>
Dadurch werden alle Jobs gescannt, die zum Auschecken der angegebenen URL konfiguriert sind. Wenn sie auch mit Abfragen konfiguriert sind, wird die Abfrage sofort ausgelöst (und wenn dadurch eine Änderung gefunden wird, die einen Build wert ist, wird nacheinander ein Build ausgelöst. )
Dadurch kann ein Skript gleich bleiben, wenn Jobs in Jenkins kommen und gehen.
Wenn Sie mehrere Repositorys unter einer einzigen Repository-Hostanwendung (z. B. Gitosis) haben, können Sie ein einzelnes Post-Receive-Hook-Skript für alle Repositorys freigeben. Schließlich erfordert diese URL auch für gesicherte Jenkins keine Authentifizierung, da der Server nichts direkt verwendet, was der Client sendet. Es wird eine Abfrage ausgeführt, um zu überprüfen, ob eine Änderung vorliegt, bevor ein Build tatsächlich gestartet wird.
Wie hier erwähnt , stellen Sie sicher , die richtige Adresse für Ihren Jenkins - Server zu verwenden:
Da wir Jenkins als eigenständigen Webserver auf Port 8080 ausführen, sollte die URL ohne Folgendes lauten /jenkins
:
http://jenkins:8080/git/notifyCommit?url=git@gitserver:tools/common.git
Um diesen letzten Punkt zu bekräftigen, fügt ptha in den Kommentaren hinzu :
Es mag offensichtlich sein, aber ich hatte Probleme mit:
curl http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>.
Der URL- Parameter sollte genau mit der Repository-URL Ihres Jenkins-Jobs übereinstimmen .
Beim Kopieren von Beispielen habe ich in unserem Fall das Protokoll weggelassen ssh://
und es hat nicht funktioniert.
Sie können auch einen einfachen Post-Receive-Hook verwenden, wie in " Push-basierte Builds mit Jenkins und GIT ".
#!/bin/bash
/usr/bin/curl --user USERNAME:PASS -s \
http://jenkinsci/job/PROJECTNAME/build?token=1qaz2wsx
Konfigurieren Sie Ihren Jenkins-Job so, dass er Builds remote auslösen und ein Authentifizierungstoken verwenden kann ( 1qaz2wsx
in diesem Beispiel).
Dies ist jedoch ein projektspezifisches Skript, und der Autor erwähnt eine Möglichkeit, es zu verallgemeinern.
Die erste Lösung ist einfacher, da sie nicht von der Authentifizierung oder einem bestimmten Projekt abhängt.
Ich möchte in Änderungssatz einchecken, ob mindestens eine Java-Datei vorhanden ist, die der Build starten soll.
Angenommen, die Entwickler haben nur XML-Dateien oder Eigenschaftendateien geändert, dann sollte der Build nicht gestartet werden.
Grundsätzlich kann Ihr Build-Skript:
- Fügen Sie
git notes
beim ersten Aufruf eine Build-Notiz (siehe ) ein
- Rufen Sie bei den nachfolgenden Aufrufen die Liste der Commits zwischen
HEAD
Ihrem Build-Kandidaten für den Build und dem Commit ab, auf das durch git notes
'build' ( git show refs/notes/build
) verwiesen wird : git diff --name-only SHA_build HEAD
.
- Ihr Skript kann diese Liste analysieren und entscheiden, ob der Build fortgesetzt werden soll.
- Erstellen / verschieben Sie in jedem Fall Ihr
git notes
' build
' nach HEAD
.
Mai 2016: cwhsu weist in den Kommentaren auf folgende mögliche URL hin:
Sie können nur verwenden, curl --user USER:PWD http://JENKINS_SERVER/job/JOB_NAME/build?token=YOUR_TOKEN
wenn Sie die Trigger-Konfiguration in Ihrem Artikel festlegen
Juni 2016 polaretto weist darauf hin , in den Kommentaren :
Ich wollte hinzufügen, dass Sie mit ein wenig Shell-Scripting die manuelle URL-Konfiguration vermeiden können, insbesondere wenn Sie viele Repositorys in einem gemeinsamen Verzeichnis haben.
Zum Beispiel habe ich diese Parametererweiterungen verwendet, um den Repo-Namen zu erhalten
repository=${PWD%/hooks};
repository=${repository##*/}
und dann benutze es wie:
curl $JENKINS_URL/git/notifyCommit?url=$GIT_URL/$repository