Konfigurieren von Ausführungs- oder Buildnummern

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2019

Sie können anpassen, wie Ihre Pipelineausführungen nummeriert werden. Der Standardwert für die Ausführungsnummer ist $(Date:yyyyMMdd).$(Rev:r).

In Azure DevOps ist $(Rev:r) ein spezielles Variablenformat, das nur im Feld der Buildnummer funktioniert. Wenn ein Build abgeschlossen ist, wird der Ganzzahlwert Rev um eins erhöht, wenn sich sonst nichts an der Buildnummer geändert hat.

$(Rev:r) wird zurückgesetzt, wenn Sie einen Teil der Buildnummer ändern. Wenn Sie ihr Buildnummernformat beispielsweise als $(Build.DefinitionName)_$(Date:yyyyMMdd).$(Rev:r) konfiguriert haben, wird die Buildnummer zurückgesetzt, wenn sich das Datum am nächsten Tag ändert. Wenn Ihre Buildnummer MyBuild_20230621.1 lautet, ist MyBuild_20230621.2 die nächste Buildnummer an diesem Tag. Am nächsten Tag lautet die Buildnummer MyBuild_20230622.1.

Wenn Ihr Buildnummernformat 1.0.$(Rev:r) lautet, wird die Buildnummer auf 1.0.1 zurückgesetzt, wenn Sie einen Teil der Nummer ändern. Wenn ihre letzte Buildnummer z. B. 1.0.3 lautete und Sie die Buildnummer in 1.1.$(Rev:r) ändern, um eine Versionsänderung anzugeben, lautet die nächste Buildnummer 1.1.1.

In YAML wird diese Eigenschaft name genannt und muss sich auf der Stammebene einer Pipeline befinden.

Hinweis

Auf der Stammebene einer YAML-Datei angegebene Elemente sind Pipelineeigenschaften.

Wenn sie nicht angegeben ist, erhält die Ausführung eine eindeutige ganze Zahl als Namen. Sie können Ausführungen nützlichere Namen geben, die für Ihr Team von Bedeutung sind. Sie können eine Kombination aus Tokens, Variablen und Unterstrichzeichen verwenden. Die Eigenschaft name funktioniert nicht in Vorlagendateien.

name: $(TeamProject)_$(Build.DefinitionName)_$(SourceBranchName)_$(Date:yyyyMMdd).$(Rev:r)

steps:
  - script: echo '$(Build.BuildNumber)' # outputs customized build number like project_def_master_20200828.1

YAML-Builds sind noch nicht in TFS verfügbar.

Beispiel

Zu diesem Zeitpunkt wird eine Ausführung gestartet:

  • Projektname: Fabrikam

  • Pipelinename: CIBuild

  • Branch: main

  • Build-ID/Ausführungs-ID: 752

  • Datum: 5. Mai 2019.

  • Uhrzeit: 21:07:03.

  • Eine Ausführung wurde früher am heutigen Tag abgeschlossen.

Wenn Sie dieses Buildnummernformat angeben:

$(TeamProject)_$(Build.DefinitionName)_$(SourceBranchName)_$(Date:yyyyMMdd).$(Rev:.r)

Die zweite Ausführung an diesem Tag würde wie folgt heißen: Fabrikam_CIBuild_main_20190505.2

Token

Die folgende Tabelle zeigt, wie die einzelnen Token auf Grundlage des vorherigen Beispiels aufgelöst werden. Sie können diese Token nur verwenden, um eine Ausführungsnummer zu definieren. Sie funktionieren an keiner anderen Stelle in Ihrer Pipeline.

Token Beispiel-Ersetzungswert
$(Build.DefinitionName) CIBuild

Hinweis: Der Pipelinename darf keine ungültigen Zeichen oder Leerzeichen enthalten.
$(Build.BuildId) 752

$(Build.BuildId) ist eine interne unveränderliche ID, die auch als Ausführungs-ID bezeichnet wird. Sie ist in der gesamten Organisation einzigartig.
$(DayOfMonth) 5
$(DayOfYear) 217
$(Hours) 21
$(Minutes) 7
$(Month) 8
$(Rev:r) 2 (Die dritte Ausführung ist 3 usw.)

Verwenden Sie $(Rev:r), um sicherzustellen, dass jeder abgeschlossene Build einen eindeutigen Namen aufweist. Wenn ein Build startet, wird der Ganzzahlenwert „Rev“ um eins nach oben gezählt, wenn sich nichts an der Buildnummer geändert hat.

Wenn Sie vorangestellte Nullen in der Nummer anzeigen möchten, können Sie weitere „r“-Zeichen hinzufügen. Geben Sie beispielsweise $(Rev:rr) an, wenn die Rev-Zahl mit 01, 02 usw. beginnen soll. Wenn Sie eine mit Nullen erweiterte Rev als Teil eines Versionsnummerierungsschemas verwenden, beachten Sie, dass einige Pipelinetasks oder gängige Tools, wie NuGet-Pakete, die vorangestellten Nullen entfernen, was zu einem Versionsnummernkonflikt in den erstellten Artefakten führt.
$(Date:yyyyMMdd) 20090824

Sie können andere Datumsformate angeben, z. B. $(Date:MMddyy)
$(Seconds) 3
$(SourceBranchName) Standard
$(TeamProject) Fabrikam
$(Year:yy) 09
$(Year:yyyy) 2009

Variables

Sie können auch benutzerdefinierte und vordefinierte Variablen verwenden, die in Ihrer Nummer einen Bereich von „Alle“ haben. Wenn Sie beispielsweise My.Variable definiert haben, können Sie das folgende Zahlenformat angeben:

$(Build.DefinitionName)_$(Build.DefinitionVersion)_$(Build.RequestedFor)_$(Build.BuildId)_$(My.Variable)

Die ersten vier Variablen sind vordefiniert. My.Variable wird von Ihnen auf der Registerkarte „Variablen“ definiert.

Ausdrücke

Wenn Sie einen Ausdruck zum Festlegen der Buildnummer verwenden, können Sie einige Token nicht verwenden, da ihre Werte zum Zeitpunkt der Auswertung von Ausdrücken nicht festgelegt sind. Zu diesen Token gehören $(Build.BuildId), $(Build.BuildURL)und $(Build.BuildNumber).

Häufig gestellte Fragen

Wie groß kann eine Ausführungsnummer sein und welche Zeichen kann ich verwenden?

Ausführungen können bis zu 255 Zeichen enthalten. Zu den nicht zulässigen Zeichen gehören ", /, :, <, >, ', |, ?, @ und *. Sie können nicht mit einem . enden.

Welcher Zeitzone entsprechend werden die Werte für die Buildnummer-Zeit ausgedrückt?

Die Zeitzone ist UTC.

Die Zeitzone entspricht der Zeitzone des Betriebssystems des Computers, auf dem Ihr Anwendungsebenenserver ausgeführt wird.

Wie kann in einem Skript auf die Variable der Ausführungsnummer verwiesen werden?

Die Variable der Ausführungsnummer kann mit $(Build.BuildNumber) aufgerufen werden. Sie können eine neue Variable definieren, die die Ausführungsnummer enthält, oder die Ausführungsnummer direkt aufrufen. In diesem Beispiel ist $(MyRunNumber) eine neue Variable, die die Ausführungsnummer enthält.

# Set MyRunNumber
variables: 
  MyRunNumber: '1.0.0-CI+$(Build.BuildNumber)'


steps:
- script: echo $(MyRunNumber) # display MyRunNumber
- script: echo $(Build.BuildNumber) #display Run Number

Wie kann ich die Buildnummer dynamisch mit Bedingungen festlegen?

Sie können Variablen als Teil Ihrer Ausführungsnummer verwenden. In diesem Beispiel ändert sich die Variable why abhängig von Build.Reason und wird als Teil der Ausführungsnummer verwendet.

variables:
  - name: why
    ${{ if eq(variables['Build.Reason'], 'PullRequest') }}:
      value: pr
    ${{ elseif eq(variables['Build.Reason'], 'Manual' ) }}:
      value: manual
    ${{ elseif eq(variables['Build.Reason'], 'IndividualCI' ) }}:
      value: indivci
    ${{ else }}:
      value: other

name: $(TeamProject)_$(SourceBranchName)_$(why)_$(Date:yyyyMMdd).$(Rev:.r)

pool:
  vmImage: 'ubuntu-latest'

steps:
- script: echo '$(Build.BuildNumber)' ## output run number