So erhalten Sie das Git-Tag in Azure Pipelines

Lesezeit: 5 Minuten

Benutzer-Avatar
Muhammad Rehan Said

In Azure Pipelines habe ich Git-Tags aktiviert, um Pipelines wie folgt auszulösen:

trigger:
  branches:
    include:
    - '*'
  tags:
    include:
    - '*'

Jetzt möchte ich wissen, ob es eine Möglichkeit gibt, programmgesteuert zu bestimmen:

  1. Wurde die Pipeline von einem Git-Commit oder Git-Tag gestartet?
  2. Wenn die Pipeline von einem Git-Tag gestartet wurde, wie lautet der Tag-Name?

  • 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

Benutzer-Avatar
Alex Kaszyński

Um zu überprüfen, ob der Commit von einem Tag stammt, verwenden Sie:

startsWith(variables['Build.SourceBranch'], 'refs/tags/')

Von James Thurley:

Holen Sie sich den Namen des Tags mit:

$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:

startsWith(variables['Build.SourceBranch'], 'refs/tags/')

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.

Vollständige Dokumente sind jetzt hier.

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.

Benutzer-Avatar
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

Benutzer-Avatar
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

Benutzer-Avatar
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).

Geben Sie hier die Bildbeschreibung ein

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:

Geben Sie hier die Bildbeschreibung ein

  • 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

1228000cookie-checkSo erhalten Sie das Git-Tag in Azure Pipelines

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy