Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022 | Azure DevOps Server 2020
Azure-Pipelines können Pipelines auf Linux-, macOS- und Windows-Computern ausführen. Wenn Sie plattformübergreifende Entwicklungstechnologien wie .NET Core, Node.jsoder Python verwenden, bieten diese plattformübergreifenden Buildfunktionen sowohl Vorteile als auch Herausforderungen. Die meisten Pipelines enthalten beispielsweise ein oder mehrere Skripts, die während des Buildvorgangs ausgeführt werden sollen, aber die Skriptsyntax unterscheidet sich häufig von Plattformen.
In diesem Artikel wird erläutert, wie Sie plattformübergreifendes Skripting verwenden können, um verschiedene Buildplattformen zu unterstützen. Sie können einen Azure Pipelines-Schritt script verwenden, um das Schreiben plattformübergreifender Skripts zu erleichtern. Sie können auch Bedingungen verwenden, um Skripts auf bestimmte Plattformen abzuzielen.
Skriptschritt
Das Skript-Befehlswort ist eine Abkürzung für die Befehlszeilenaufgabe, die Bash unter Linux und macOS oder cmd.exe unter Windows ausführt.
Sie können mit script einfach Argumente an ein plattformübergreifendes Tool übergeben. Der script Schritt wird im nativen Skriptdolmetscher jeder Plattform ausgeführt, Bash unter macOS und Linux oder cmd.exe unter Windows. Im folgenden Beispiel wird ein script Schritt zum Aufrufen npm mit einer Reihe von Argumenten verwendet.
Umgebungsvariablen
Befehlszeile, PowerShell und Bash lösen Umgebungsvariablen unterschiedlich auf. Um auf einen vom System bereitgestellten Wert wie PATH zuzugreifen, müssen Sie eine andere Syntax pro Plattform verwenden.
Azure Pipelines verwendet Makrosyntax als plattformübergreifende Methode zum Verweisen auf Variablen zur Laufzeit. Variablen mit Makrosyntax werden verarbeitet, bevor eine Aufgabe während der Laufzeit ausgeführt wird. Die Variable wird erweitert, bevor die Plattformshell darauf trifft.
Um die Makrosyntax in einer Pipeline zu verwenden, umklammern Sie den Variablennamen wie folgt: $(<variable name>). Das folgende plattformübergreifende Beispielskript gibt die ID der Pipeline an.
steps:
- script: echo This is pipeline $(System.DefinitionId)
Diese Syntax funktioniert auch für Variablen, die Sie innerhalb der Pipeline definieren.
variables:
Example: 'myValue'
steps:
- script: echo The value passed in is $(Example)
Bash-Aufgabe
Wenn Sie komplexere Skripts benötigen, sollten Sie sie in Bash schreiben und die Bash-Aufgabe in Ihrer Pipeline verwenden. Die meisten macOS- und Linux-Agents verwenden Bash als Shell, und Windows-Agents können Git Bash oder Windows Subsystem für Linux Bash verwenden. Von Microsoft gehostete Agents sind standardmäßig bash vorinstalliert.
Im folgenden Beispiel wird eine Bash-Aufgabe ausgeführt, mit der Sie entscheiden können, ob ein Build ausgelöst werden soll.
trigger:
batch: true
branches:
include:
- main
steps:
- bash: |
echo "Hello world from $AGENT_NAME running on $AGENT_OS"
case $BUILD_REASON in
"Manual") echo "$BUILD_REQUESTEDFOR manually queued the build." ;;
"IndividualCI") echo "This is a CI build for $BUILD_REQUESTEDFOR." ;;
"BatchedCI") echo "This is a batched CI build for $BUILD_REQUESTEDFOR." ;;
*) $BUILD_REASON ;;
esac
displayName: Hello world
Hinweis
PowerShell ist auch eine Option für Skripts. Die pwsh Tastenkombination führt PowerShell 7.x unter macOS, Linux oder Windows aus. Agents müssen PowerShell 7.x installiert haben.
Microsoft-gehostete Agents haben PowerShell 7.x standardmäßig installiert.
Plattformbasiertes Wechseln
Plattformspezifische Skripts für doppelte Pipelinelogik verursachen zusätzliche Arbeit und erhöhtes Fehlerrisiko. Wenn Sie jedoch keine plattformspezifische Skripterstellung vermeiden können, können Sie Bedingungen verwenden, um zu erkennen, auf welcher Plattform Sie sich befinden.
Um beispielsweise die IP-Adresse des Build-Agents abzurufen, müssen Sie ifconfig unter macOS, ip addr unter Ubuntu Linux und das Get-NetIPAddress Cmdlet unter Windows PowerShell verwenden. Die folgende Pipeline ruft diese Informationen von Agents auf verschiedenen Plattformen mithilfe von Bedingungen ab.
steps:
# Linux
- bash: |
export IPADDR=$(ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1 -d'/')
echo "##vso[task.setvariable variable=IP_ADDR]$IPADDR"
condition: eq( variables['Agent.OS'], 'Linux' )
displayName: Get IP on Linux
# macOS
- bash: |
export IPADDR=$(ifconfig | grep 'en0' -A3 | grep inet | tail -n1 | awk '{print $2}')
echo "##vso[task.setvariable variable=IP_ADDR]$IPADDR"
condition: eq( variables['Agent.OS'], 'Darwin' )
displayName: Get IP on macOS
# Windows
- powershell: |
Set-Variable -Name IPADDR -Value ((Get-NetIPAddress | ?{ $_.AddressFamily -eq "IPv4" -and !($_.IPAddress -match "169") -and !($_.IPaddress -match "127") } | Select-Object -First 1).IPAddress)
Write-Host "##vso[task.setvariable variable=IP_ADDR]$IPADDR"
condition: eq( variables['Agent.OS'], 'Windows_NT' )
displayName: Get IP on Windows
# use the value
- script: |
echo The IP address is $(IP_ADDR)