Wie kann ein Build von Jenkins aus ausgelöst werden?
Wie konfiguriere ich Git Post Commit Hook?
Meine Anforderung ist, dass bei Änderungen im Git-Repository für ein bestimmtes Projekt automatisch der Jenkins-Build für dieses Projekt gestartet wird.
Im Jenkins-Trigger-Build-Abschnitt habe ich den Trigger-Build remote ausgewählt.
Im .git
Verzeichnis befindet sich das Hooks-Verzeichnis, in dem die Post-Commit-Datei konfiguriert werden muss.
Ich bin verwirrend, wie man von dort aus einen Build auslöst (ich weiß, dass wir teilweise den Befehl curl verwenden sollten).
curl cmbuild.aln.com/jenkins/view/project name/job/myproject/buildwithparameters?Branch=feat-con
Ich habe diesen Befehl in mein Git-Server-Hooks-Verzeichnis gestellt (Post-Commit-Hook).
Immer wenn die Änderungen im Repository vorgenommen werden, wird die automatische Erstellung ausgeführt.
Ich möchte das Änderungsset einchecken, ob in mindestens einer Java-Datei der Build gestartet werden soll.
Angenommen, die Entwickler haben nur XML-Dateien oder Eigenschaftendateien geändert, die der Build nicht starten soll.
Zusammen mit an xml
, dass die .java
Dateien wird die Build starten soll.
Antworten:
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:
Wie hier erwähnt , stellen Sie sicher , die richtige Adresse für Ihren Jenkins - Server zu verwenden:
Um diesen letzten Punkt zu bekräftigen, fügt ptha in den Kommentaren hinzu :
Sie können auch einen einfachen Post-Receive-Hook verwenden, wie in " Push-basierte Builds mit Jenkins und GIT ".
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.
Grundsätzlich kann Ihr Build-Skript:
git notes
beim ersten Aufruf eine Build-Notiz (siehe ) einHEAD
Ihrem Build-Kandidaten für den Build und dem Commit ab, auf das durchgit notes
'build' (git show refs/notes/build
) verwiesen wird :git diff --name-only SHA_build HEAD
.git notes
'build
' nachHEAD
.Mai 2016: cwhsu weist in den Kommentaren auf folgende mögliche URL hin:
Juni 2016 polaretto weist darauf hin , in den Kommentaren :
quelle
yourRepo.git/hooks/post-receive
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 das Protokoll weggelassen , in unserem Fall ssh: // und es hat nicht funktioniert.Hoffe das hilft: http://nrecursions.blogspot.in/2014/02/how-to-trigger-jenkins-build-on-git.html
Es ist nur eine Frage der Verwendung
curl
, um einen Jenkins-Job mithilfe der von git bereitgestellten Git-Hooks auszulösen.Der Befehl
kann einen Jenkins-Job ausführen, wobei
someJob
der Name des Jenkins-Jobs lautet.Suchen Sie nach dem
hooks
Ordner in Ihrem versteckten .git-Ordner. Benennen Sie diepost-commit.sample
Datei in umpost-commit
. Öffnen Sie es mit Notepad, entfernen Sie die: Nothing
Zeile und fügen Sie den obigen Befehl ein.Das ist es. Immer wenn Sie ein Commit durchführen, löst Git die in der Datei definierten Post-Commit-Befehle aus.
quelle
Da die vorherige Antwort ein Beispiel dafür gezeigt hat, wie der vollständige Hook aussehen könnte, ist hier der Code meines funktionierenden Post-Receive-Hooks:
In diesem Fall löse ich Jenkins-Jobs nur aus, wenn ich auf Master und nicht auf andere Zweige drücke.
quelle
Ich möchte zu den obigen Antworten hinzufügen, dass es etwas schwieriger wird, wenn die Jenkins-Autorisierung aktiviert ist.
Nach dem Aktivieren wurde eine Fehlermeldung angezeigt, dass ein anonymer Benutzer eine Leseberechtigung benötigt.
Ich habe zwei mögliche Lösungen gesehen:
1: Ändern meines Hakens auf:
2: Festlegen der projektbasierten Autorisierung.
Die ersteren Lösungen haben den Nachteil, dass ich mein passwd in der Hook-Datei verfügbar machen musste. In meinem Fall inakzeptabel.
Der zweite funktioniert für mich. In den globalen Authentifizierungseinstellungen musste ich Overall> Read for Anonymous user aktivieren. In dem Projekt, das ich auslösen wollte, musste ich Job> Erstellen und Job> Für Anonym lesen aktivieren.
Dies ist immer noch keine perfekte Lösung, da Sie das Projekt jetzt in Jenkins ohne Anmeldung sehen können. Es gibt vielleicht eine noch bessere Lösung mit dem früheren Ansatz mit http-Login, aber ich habe es nicht herausgefunden.
quelle