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 zum Master drängt. Bisher konnte ich es so einrichten, dass ein Build immer dann ausgelöst wird, wenn jemand irgendwohin pusht, aber das ist zu weit gefasst. Ich habe dies mit Post-Receive-Service-Hooks auf Git gemacht.
Ich habe das Jenkins-Wiki und einige 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 Jenkins nur auslöst, wenn master
es geändert wird?
Antworten:
Wie bereits von gezzed in seinem Kommentar erwähnt, gibt es mittlerweile eine gute Lösung (beschrieben in Polling muss sterben: Auslösen von Jenkins-Builds über einen Git-Hook ):
Legen Sie die Build - Triggers Jenkins Job Poll SCM , aber nicht einen Zeitplan festlegen.
Erstellen Sie einen GitHub-Trigger nach dem Empfang, um die URL zu benachrichtigen
Dies löst alle Builds aus, die das angegebene Git-Repository abfragen.
Bei der Abfrage wird jedoch tatsächlich geprüft, ob etwas in den verwendeten Zweig verschoben wurde.
Es funktioniert perfekt.
quelle
Ab Version 0.5 kann das GitHub-Plugin für Jenkins einen Build auslösen, wenn eine Änderung an GitHub übertragen wird .
quelle
Anstatt Builds remote auszulösen , ändern Sie Ihre Jenkins-Projektkonfiguration so, dass Builds durch Abfragen ausgelöst werden.
Jenkins kann basierend auf einer festen internen oder einer URL abfragen. Letzteres möchten Sie Builds überspringen, wenn für diesen Zweig keine Änderungen vorgenommen wurden. Die genauen Details finden Sie in der Dokumentation . Im Wesentlichen müssen Sie nur die Option "SCM abrufen" aktivieren, den Zeitplanabschnitt leer lassen und eine Remote-URL festlegen, um JENKINS_URL / job / name / polling zu treffen.
Ein Problem, wenn Sie eine gesicherte Jenkins-Umgebung haben, ist anders
/build
, die/polling
URL erfordert eine Authentifizierung. Die Anweisungen hier enthalten Details. Zum Beispiel habe ich einen GitHub Post-Receive-Hookusername:apiToken@JENKIS_URL/job/name/polling
.quelle
Führen Sie für GitLab die folgenden Schritte aus:
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
beispielsweiseAdd Web Hook
und danntest hook
Jedes Mal, wenn Sie sich für das Repository festlegen, wird der Web-Hook ausgelöst und ein Build erstellt. Stellen Sie sicher, dass Ihr Jenkins-Arbeitsbereich
delete workspace before each build
so eingestellt ist, dass Sie eine neue Kopie des neuen Codes erhalten.quelle
Nicht mit Git verwandt, aber unten werde ich bei der Jenkins-Jobkonfiguration im Detail mit Mercurial helfen. Es kann anderen mit einem ähnlichen Problem helfen.
Poll SCM
Option. Stellen Sie den Wert auf ein* * * * *
[URLTrigger] - Poll with a URL
. Jetzt können Sie einige Optionen wie Änderung des Änderungsdatums, URL-Inhalt usw. auswählen.Monitor change of content
Lösen Sie jetzt durch einige Test-Check-Ins eine Änderung am Mercurial-Repository 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 Text angezeigt
Started by an SCM change
. Andernfalls der Benutzer, der es manuell gestartet hat.quelle
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 mithilfe der von Git bereitgestellten Git-Hooks auszulösen.
Der Befehl
curl http://localhost:8080/job/someJob/build?delay=0sec
kann einen Jenkins-Job ausführen, wobeisomeJob
der Name des Jenkins-Jobs lautet.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 Notepad, entfernen Sie die Zeile ": Nothing" 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
Kontinuierliche Integration mit Jenkins, nachdem der Code vom Git-Befehl / der GUI in das Repository verschoben wurde:
.git/hooks
Ordner.Der
hooks
Ordner enthält die wenigen Dateien. Überprüfen Sie das "Post-Commit". Wenn nicht vorhanden, erstellen Sie eine Datei "post-commit" ohne Dateierweiterung:Bearbeiten Sie die "Post-Commit" -Datei mit dem folgenden Befehl. Stellen Sie sicher, dass es in Ihrem lokalen Quellcode-Hooks-Ordner vorhanden ist.
Beispiel:
5.
userName
: Jenkins BenutzernamejobName
: Jobname des BuildsapiToken
: Um Ihr API-Token zu erhalten, rufen Sie Ihre Jenkins-Benutzerseite auf (oben rechts in der Benutzeroberfläche). Es ist im Menü "Konfigurieren" links auf der Seite verfügbar: "API-Token anzeigen"Nehmen Sie Änderungen an Ihrem Quellcode vor und übergeben Sie den Code an das Repository.
Ihr Job
http://localhost:8080/jenkins/job/Gitcommittest/
sollte das Bauen sein.quelle
Sie müssen den Zweig angeben. Standardmäßig hört es alles. Siehe den Blog-Beitrag Hudson: Git and Maven Plugins .
quelle
Das generische Webhook Trigger Plugin kann mit Filtern konfiguriert werden, um dies zu erreichen.
Bei Konfiguration mit
ref
und Ausdruck$.ref
.$ref
und Filterausdruck wie^refs/heads/master$
.Dann wird dieser Job bei jedem Push an ausgelöst
master
. Keine Abstimmung.Sie möchten wahrscheinlich mehr Werte aus dem 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
quelle
In meiner aktuellen Organisation tun wir dies nicht in Master, sondern sowohl in Develop als auch in Release / Branch (wir verwenden Git Flow), um Snapshot-Builds zu generieren.
Da wir eine Multi-Branch-Pipeline verwenden, tun wir dies in der Jenkins-Datei mit der when {} -Syntax ...
Dies wird in diesem Blog-Beitrag detailliert beschrieben: https://jenkins.io/blog/2017/01/19/converting-conditional-to-pipeline/#longer-pipeline
quelle
Die obigen Antworten sind richtig, aber ich spreche sie an, die wegen ihrer Einfachheit Neulinge hier sind
speziell zum Setzen des Build-Triggers für die Pipeline:
Angenommen, Sie haben zwei Github-Zweige: 1.master, 2.dev und Jenkinsfile (wo das Pipeline-Skript geschrieben ist) und andere Dateien sind in jedem 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 sein und mit Ihrem Namen und Ihrer E-Mail- Adresse konfiguriert werden
## 2.Code-Integration: Github-Plugin und Webhook-Ansatz Voraussetzung Das Github-Plugin muss installiert und der Github-Server konfiguriert sein. Die Verbindung sollte getestet werden, wenn die folgende Konfiguration nicht berücksichtigt wird
Konfigurieren Sie das Github-Plugin mit einem Konto auf Jenkins
GitHub-Abschnitt Fügen Sie einen Github-Server hinzu, wenn keine API-URL vorhanden ist: https://api.github.com Anmeldeinformationen: Hinzufügen von geheimem Text (Klicken Sie auf die Schaltfläche Hinzufügen: Wählen Sie Typ für geheimen Text aus) mit dem Wert Persönliches Zugriffstoken (Generieren Sie ihn aus Ihren Github-Konten -> Einstellungen -> Entwicklereinstellung -> persönliches Zugriffstoken -> Token hinzufügen -> Bereiche überprüfen -> Token kopieren) Verbindung testen -> Überprüfen Sie, ob eine Verbindung zu Ihrem Github-Konto besteht oder nicht Aktivieren Sie das Kontrollkästchen mit Hooks verwalten vorheriger Berechtigungsnachweis für 'gemeinsames Geheimnis'
Fügen Sie einen Webhook hinzu, wenn er nicht von zu Ihrem Repository hinzugefügt wurde
http: // Public_IP: Jenkins_PORT / github-webhook /
Wenn Sie ein Github Pull-Anforderungs-Plugin haben, konfigurieren Sie es auch mit der veröffentlichten Jenkins-URL.
quelle
Verwenden Sie das Pull Request Builder-Plugin: https://wiki.jenkins-ci.org/display/JENKINS/GitHub+pull+request+builder+plugin
Es ist wirklich einfach. Sie können dann GitHub-Webhooks einrichten, um Builds auszulösen.
quelle
Meine Lösung für einen lokalen Git-Server: Gehen Sie zu Ihrem lokalen Git-Server-Hook-Verzeichnis, ignorieren Sie das vorhandene update.sample und erstellen Sie eine neue Datei mit dem wörtlichen Namen "update", z.
Die Echo-Anweisung wird unter Ihrem Git-Push-Ergebnis angezeigt. Das Token kann aus Ihrer Jenkins-Jobkonfiguration entnommen werden. Suchen Sie danach. Wenn die Datei "update" nicht aufgerufen wird, versuchen Sie es mit anderen gleichnamigen Dateien ohne Erweiterung "sample".
Das ist alles was du brauchst
quelle