Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022 | Azure DevOps Server 2020
Azure Pipelines může spouštět kanály na počítačích s Linuxem, macOS a Windows. Pokud používáte multiplatformní vývojové technologie, jako jsou .NET Core, Node.jsnebo Python, přináší tyto možnosti vytváření napříč platformami výhody i výzvy. Například většina pipelines obsahuje jeden nebo více skriptů, které se mají spustit během procesu sestavení, ale syntaxe skriptů se často liší mezi jednotlivými platformami.
Tento článek vysvětluje, jak můžete pomocí skriptování napříč platformami podporovat různé platformy sestavení. Pomocí kroku Azure Pipelines script můžete usnadnit psaní skriptů pro různé platformy. Podmínky můžete použít také k cílení skriptů na konkrétní platformy.
Krok skriptu
Klíčové slovo skriptu je zkratka pro úlohu příkazového řádku, která spouští Bash v Linuxu a macOS nebo cmd.exe ve Windows.
K snadnému předávání argumentů do nástroje pro různé platformy můžete použít script . Tento script krok běží v interpretu nativních skriptů jednotlivých platforem, Bash v macOS a Linuxu nebo cmd.exe ve Windows. Následující příklad používá script krok k volání npm se sadou argumentů.
- YAML
- Klasické
steps:
- script: |
npm install
npm test
Proměnné prostředí
Příkazový řádek, PowerShell a Bash přeloží proměnné prostředí odlišně. Pokud chcete získat přístup k systémové hodnotě, jako je PATH, musíte pro každou platformu použít jinou syntaxi.
Azure Pipelines používá syntaxi maker jako multiplatformní způsob odkazování na proměnné za běhu. Proměnné s makro syntaxí se zpracovávají před tím, než se úloha spustí za běhu. Proměnná se rozbalí, než ji platformový shell zpracuje.
Chcete-li použít syntaxi makra v pipeline, ohraničte název proměnné následujícím způsobem: $(<variable name>). Následující ukázkový skript pro více platforem vypisuje ID pipeline.
- YAML
- Klasické
steps:
- script: echo This is pipeline $(System.DefinitionId)
Tato syntaxe také funguje pro proměnné, které definujete v rámci pipeline.
variables:
Example: 'myValue'
steps:
- script: echo The value passed in is $(Example)
Bash – úloha
Pokud potřebujete složitější skripty, zvažte jejich napsání v Bashu a použití úlohy Bash ve vašem kanálu. Většina agentů macOS a Linux používá Bash jako prostředí a agenti Windows můžou používat Git Bash nebo Subsystém Windows pro Linux Bash. Agenti hostovaní Microsoftem mají ve výchozím nastavení předinstalovaný Bash.
Následující příklad spustí úlohu Bash, která pomáhá rozhodnout, jestli se má spustit sestavení.
- YAML
- Klasické
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
Poznámka:
PowerShell je také možnost pro skripty. Zástupce pwsh spustí PowerShell 7.x v systému macOS, Linux nebo Windows. Agenti musí mít nainstalovaný PowerShell 7.x.
Agenti hostovaní Microsoftem mají ve výchozím nastavení nainstalovaný PowerShell 7.x.
Přepínání založené na platformě
Skripty specifické pro platformu vedoucí k duplikaci logiky kanálů způsobují nadbytečnou práci a zvyšují riziko chyb. Pokud se ale nemůžete vyhnout skriptování specifické pro platformu, můžete pomocí podmínek zjistit, jakou platformu používáte.
Pokud například chcete získat IP adresu agenta sestavení, musíte použít ifconfig v systému macOS, ip addr v systému Ubuntu Linux a rutinu Get-NetIPAddress ve Windows PowerShellu. Následující proces získává tyto informace od agentů na různých platformách s využitím podmínek.
- YAML
- Klasické
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)