$tags = git tag --sort=-creatordate
$tag = $tags[0]
Dadurch werden die Tags sowohl für annotierte als auch für nicht annotierte Tags korrekt sortiert, sodass das erste Ergebnis das neueste Tag ist.
Ich habe die ursprüngliche Antwort entfernt und durch die richtige von James Thurley ersetzt. Ich würde meine Antwort löschen, aber anscheinend können Sie eine akzeptierte Antwort nicht löschen.
Dies hängt von der korrekten Sortierung der Tags ab und gibt Ihnen möglicherweise nicht den Namen des Tags, das den Build tatsächlich ausgelöst hat.
– jrjohnson
20. November 2019 um 19:48 Uhr
Neue Antwort spiegelt die Sortierung wider. Die Antwort konnte nicht entfernt werden, also habe ich James ‘Antwort zitiert.
– Alex Kaszyński
3. Dezember 2019 um 23:26 Uhr
Ich weiß, das ist ein bisschen alt, aber verwendest du die erste Option? Ich habe große Probleme, es zu benutzen. Ich habe gefunden dieses Problem auf GitHub aber es ist mir nicht ganz klar.
– Jéf Bueno
26. März 2021 um 11:25 Uhr
Die anderen Antworten hier decken den ersten Teil der Frage ab, sodass Sie, wie Alex Kaszynski bereits betont hat, eine YAML-Bedingung verwenden können:
Das Ermitteln des Tag-Namens ist jetzt etwas einfacher als zu dem Zeitpunkt, als die Frage gestellt wurde:
Build.SourceBranchName
Diese Variable enthält das letzte Segment des Git-Ref-Pfads, also zum Beispiel, ob das Tag war refs/tags/1.0.2enthält diese Variable 1.0.2: der Tag-Name.
git describe kann Ihnen den (nächstgelegenen) Tag-Namen für einen bestimmten Git-Hash bereitstellen, und Azure kann Ihnen den aktuellen Hash mitteilen $(Build.SourceVersion).
Verwenden Sie die --exact-match begrenzen git describe um nur ein Tag aus dem spezifischen Commit zu verwenden:
git describe --exact-match $(Build.SourceVersion)
Wenn es ein Tag gibt, wird es auf stdout zurückgegeben:
$ git describe --exact-match d9df242
v1.0.0
Wenn kein Tag vorhanden ist, git describe --exact-match Exits mit Exit-Code 128:
$ git describe --exact-match cc1f9d2
fatal: no tag exactly matches 'cc1f9d23854c37dec000485c6c4009634516a148'
$ echo $?
128
Sie können dies also in einem Test verwenden oder die Aufgabe in Pipelines, die auf mehr als nur gekennzeichnete Revisionen auslösen, einfach nicht bestehen.
Wenn Sie Tags ohne Anmerkungen haben, sollten Sie diesen Befehl verwenden: $ git description –tags –exact-match cc1f9d2
– Etalon11
20. April 2021 um 11:50 Uhr
Die akzeptierte Antwort mit git tag -l v* hat bei mir nicht funktioniert, da es die Tags nicht richtig bestellt hat, sondern gegeben hat 1.1, 1.11, 1.12, 1.2, 1.3, etc.
Ich fand es besser zu machen:
$tags = git tag --sort=-creatordate
$tag = $tags[0]
Dadurch werden die Tags sowohl für annotierte als auch für nicht annotierte Tags korrekt sortiert, sodass das erste Ergebnis das neueste Tag ist.
Scheiki Abramczyk
Wenn Sie die Pipeline als Trigger mit Tag konfigurieren, bedeutet dies, dass die Pipeline ausgeführt wird, wenn ein neues Tag übertragen wird. Also:
1) Die Pipeline beginnt mit dem Git-Tag.
2) Ich verstehe die Frage nicht, ob Sie Tag gedrückt haben test so wird der Tag-Name sein test.
Wenn Sie programmgesteuert wissen möchten, ob der Build-Trigger ein Tag war und wie der Tag-Name lautet, können Sie die Umgebungsvariable überprüfen Build.SourceBranch Wenn der Build von einem Tag stammt, lautet der Wert: refs/tags/tagName.
Fügen Sie also einfach eine PowerShell-Aufgabe hinzu und geben Sie den Wert aus:
Write-Host $env:Build_SourceBranch
Vielleicht war ich nicht klar genug. Ich möchte programmgesteuert wissen, ob die Pipeline mit einem Tag gestartet wurde und was das Tag ist.
– Muhammad Rehan Said
28. Mai 2019 um 7:45 Uhr
jrjohnson
Laut der dieses Dokument Das Tag, das den Build gestartet hat, ist in zu finden BUILD_SOURCEBRANCH.
Wenn dieser Build durch die Erstellung eines Tags in die Warteschlange gestellt wurde, ist dies der Name dieses Tags. Für Azure Pipelines wird BUILD_SOURCEBRANCH auf den vollständigen Git-Referenznamen gesetzt, z. B. refs/tags/tag_name.
Vielleicht war ich nicht klar genug. Ich möchte programmgesteuert wissen, ob die Pipeline mit einem Tag gestartet wurde und was das Tag ist.
– Muhammad Rehan Said
28. Mai 2019 um 7:45 Uhr
Felza
Um deine zweite Frage zu beantworten. Wenn es Ihnen nichts ausmacht, eine separate Pipeline zum Auslösen durch Tags zu haben, können Sie Continuous Integration aktivieren und den YAML-Trigger wie unten gezeigt überschreiben. Dieses Beispiel löst Builds mit Tags aus, die das Muster „test-*“ haben (unabhängig von der Verzweigung).
Auf diese Weise können Sie einfach ausführen git describe in Ihrer Pipeline und gibt den Namen des Tags aus, das den Build ausgelöst hat.
Hier sehen Sie das Ergebnis:
HAFTUNGSAUSSCHLUSS: Nach einigen weiteren Tests habe ich festgestellt, dass git description tatsächlich das neueste Tag für diesen Commit übernimmt. Das bedeutet aber auch, wenn Sie 2 Tags gleichzeitig an denselben Commit pushen, gibt git description das neueste Tag in beiden Durchläufen der Pipeline aus.
– Felza
17. September 2020 um 10:55 Uhr
12280000cookie-checkSo erhalten Sie das Git-Tag in Azure Pipelinesyes
Hast du jemals eine Antwort auf deine Frage gefunden? Ich versuche die Antwort auf 2 zu finden.
– Arya
6. August 2019 um 1:37 Uhr
@arya Siehe Antwort unten.
– Muhammad Rehan Said
6. August 2019 um 7:47 Uhr