Ich habe Probleme, Jenkins dazu zu bringen, ein bestimmtes Tag zu erstellen. Das Tag ist Teil eines parametrisierten Builds, aber ich weiß nicht, wie ich es an das Git-Plugin weitergeben soll, um nur dieses Tag zu erstellen. Dies hat 3 Stunden meines Tages gedauert und ich habe den Meistern beim Stapelüberlauf eine Niederlage eingeräumt.
120
Antworten:
Ich konnte dies mithilfe des Parameters "Zweige zum Erstellen" tun:
Ersetzen Sie [Tag-Name] durch den Namen Ihres Tags.
quelle
HEAD
. Die Logik des Git-Plugins scheint diese beiden Revisionen zu vergleichen, die in meinem Repository immer ungleich sind und daher immer ein neuer Build ausgelöst wird.Keine dieser Antworten war für mich mit Jenkins CI v.1.555, Git Client Plugin v.1.6.4 und Git Plugin 2.0.4 ausreichend.
Ich wollte einen Job für ein Git-Repository für ein bestimmtes festes (dh nicht parametrisiertes) Tag erstellen. Ich musste eine Lösung aus den verschiedenen Antworten und dem von Thilo zitierten Blog-Beitrag "Build a Git Tag" zusammenstellen .
git push --tags
+refs/tags/*:refs/remotes/origin/tags/*
*/tags/<TAG_TO_BUILD>
(ersetzen Sie ihn<TAG_TO_BUILD>
durch Ihren tatsächlichen Tag-Namen).Das Hinzufügen der Refspec für mich erwies sich als kritisch. Obwohl es so aussah, als würden die Git-Repositorys standardmäßig alle Remote-Informationen abrufen, als ich sie leer ließ, konnte das Git-Plugin mein Tag dennoch nicht finden. Nur wenn ich im Feld Refspec explizit "Get the Remote Tags" angegeben habe, konnte das Git-Plugin mein Tag identifizieren und daraus erstellen.
Update 2014-5-7 : Leider hat diese Lösung einen unerwünschten Nebeneffekt für Jenkins CI (v.1.555) und den Push-Benachrichtigungsmechanismus des Git-Repositorys à la Stash Webhook an Jenkins : Jedes Mal, wenn ein Zweig im Repository aktualisiert wird Bei einem Push werden die Tag-Build-Jobs ebenfalls erneut ausgelöst. Dies führt dazu, dass immer wieder dieselben Tag-Jobs unnötig neu erstellt werden. Ich habe versucht, die Jobs mit und ohne die Option "Abfrage über Arbeitsbereich erzwingen" zu konfigurieren, und es schien keine Auswirkung zu haben. Die einzige Möglichkeit, Jenkins daran zu hindern, unnötige Builds für die Tag-Jobs zu erstellen, besteht darin, das Feld Refspec zu löschen (dh das Feld zu löschen
+refs/tags/*:refs/remotes/origin/tags/*
).Wenn jemand eine elegantere Lösung findet, bearbeiten Sie diese Antwort bitte mit einem Update. Ich vermute zum Beispiel, dass dies möglicherweise nicht passieren würde, wenn die Referenzspezifikation
+refs/tags/<TAG TO BUILD>:refs/remotes/origin/tags/<TAG TO BUILD>
nicht das Sternchen- Sammelelement wäre . Im Moment funktioniert diese Lösung jedoch für uns. Wir entfernen nur die zusätzliche Refspec, nachdem der Job erfolgreich war.quelle
+refs/heads/*:refs/remotes/origin/*
, wird dies jetzt der Fall sein+refs/heads/*:refs/remotes/origin/* +refs/tags/*:refs/remotes/origin/tags/*
. (Ich habe nicht viel mit Refspecs gearbeitet, daher waren einige Experimente erforderlich, um herauszufinden, dass dieses Feld durch Leerzeichen begrenzt ist.)Kannst du Jenkins nicht sagen, dass er aus einem Ref-Namen bauen soll? Wenn ja, dann ist es
Bei all den Fragen, die ich zu Jenkins und Hudson sehe, würde ich vorschlagen, zu TeamCity zu wechseln. Ich musste keine Konfigurationsdateien bearbeiten, damit TeamCity funktioniert.
quelle
git push --tags
Wenn Sie Jenkins-Pipelines verwenden und ein bestimmtes Tag (z. B. einen
TAG
Parameter Ihres Builds) auschecken möchten, können Sie Folgendes tun:quelle
In einem neuesten Jenkins (1.639 und höher) können Sie:
quelle
1.0.1
) in den zu erstellenden Zweigen angegeben.Ich habe so etwas gemacht und es hat funktioniert:
Jenkins Protokoll bestätigte, dass die Quelle vom Tag abgerufen wurde
0b4d6e810546663e931cccb45640583b596c24b9
Auschecken der Revision (v0.9.5.2)quelle
refspec
war der Trick durch Klicken auf die Schaltfläche Erweitert.Ich habe das Feld Erweitert-> Refspec auf gesetzt
refs/tags/[your tag name]
. Dies scheint einfacher zu sein als die verschiedenen anderen Vorschläge für Refspec, aber es hat für mich gut funktioniert.UPDATE 23/7/2014 - Nach weiteren Tests stellte sich heraus, dass dies nicht wie erwartet funktioniert hat. Es scheint, dass die HEAD-Version noch ausgecheckt wurde. Bitte machen Sie dies als akzeptierte Antwort rückgängig. Am Ende habe ich eine funktionierende Lösung gefunden, indem ich dem Beitrag von gotgenes in diesem Thread (30. März) gefolgt bin . Das in diesem Beitrag erwähnte Problem des unnötigen Auslösens von Builds war für mich kein Problem, da mein Job von einem Upstream-Job ausgelöst wird und nicht von der Abfrage von SCM.
UPDATE APR-2018 - Beachten Sie in den Kommentaren, dass dies für eine Person funktioniert und mit der Dokumentation von Jenkins übereinstimmt.
quelle
refs/tags/<tagname>
ist , was die Jenkins Dokumentation sagt verwendet werden soll, und es funktioniert gut für mich. Vielleicht war das Plugin zum Zeitpunkt des ursprünglichen Post Buggy, aber ... ab April 2018 dies ist die richtige Antwort.refs/tags
Präfix weglassen und einfach verwenden kann<tagname>
. YMMV, aber ... es funktioniert gut für meine Zwecke.Ich konnte Jenkins dazu bringen, ein Tag zu erstellen, indem ich Refspec und Branch Specifier wie in diesem Blog-Beitrag beschrieben einstellte .
Ich musste auch den Repository-Namen (in meinem Fall auf "Ursprung") setzen, damit ich ihn in der Refspec referenzieren konnte (andernfalls würde anscheinend ein zufällig generierter Name verwendet).
quelle
Was ich am Ende getan habe war:
jenkins-target
und ließ Jenkins das verfolgenjenkins-target
jenkins-target
ZweigIch bin mir nicht sicher, ob dies für alle funktionieren wird, mein Projekt war ziemlich klein, nicht zu viele Tags und so, aber es ist kinderleicht, ich muss nicht mit Refspecs und Parametern und so herumspielen :-)
quelle
Sie können sogar einen Tag-Typ erstellen, z. B.
1.2.3-alpha43
mithilfe von Platzhaltern:Refspec:
+refs/tags/*:refs/remotes/origin/tags/*
Zweigspezifizierer:
origin/tags/1.2.3-alpha*
Sie können auch " Erstellen, wenn eine Änderung an GitHub gesendet wird " ankreuzen , um den Push auszulösen. Sie müssen dem Webhook jedoch die Aktion "Erstellen" hinzufügen
quelle
Fügen Sie hier meine zwei Cent hinzu, da ich keine Antwort gesehen habe, die die Option "Mit Parametern erstellen" in Jenkins verwendet.
Hier verwende ich die Jenkins CI-Browserkonsole für das Projekt starwars_api und konnte direkt mit "Build with parameters" mit dem Wert refs / tags / tag-name erstellen
Build mit Ref-Tag-Namen
quelle