Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022 | Azure DevOps Server 2020
Azure Pipelines può eseguire pipeline in computer Linux, macOS e Windows. Se si usano tecnologie di sviluppo multipiattaforma come .NET Core, Node.jso Python, queste funzionalità di compilazione multipiattaforma comportano vantaggi e sfide. La maggior parte delle pipeline, ad esempio, include uno o più script da eseguire durante il processo di compilazione, ma la sintassi dello script è spesso diversa rispetto alle piattaforme.
Questo articolo illustra come usare script multipiattaforma per supportare piattaforme di compilazione diverse. È possibile usare un passaggio di Azure Pipelines script per semplificare la scrittura di script multipiattaforma. È anche possibile usare le condizioni per indirizzare gli script a piattaforme specifiche.
Passaggio script
La parola chiave script è una scorciatoia per l'attività della riga di comando, che esegue Bash su Linux e macOS o cmd.exe su Windows.
È possibile usare script per passare facilmente argomenti a uno strumento multipiattaforma. Il script passaggio viene eseguito nell'interprete di script nativo di ogni piattaforma, Bash in macOS e Linux o cmd.exe in Windows. Nell'esempio seguente viene usato un script passaggio per chiamare npm con un insieme di argomenti.
- YAML
- Classico
steps:
- script: |
npm install
npm test
Variabili di ambiente
La riga di comando, PowerShell e Bash risolvono le variabili di ambiente in modo diverso. Per accedere a un valore fornito dal sistema come PATH, è necessario usare una sintassi diversa per ogni piattaforma.
Azure Pipelines usa la sintassi delle macro come modo multipiattaforma per fare riferimento alle variabili in fase di esecuzione. Le variabili con sintassi macro vengono elaborate prima dell'esecuzione di un'attività durante il runtime. La variabile si espande prima che la shell della piattaforma la incontri.
Per usare la sintassi di macro in una pipeline, racchiudere il nome della variabile nel modo seguente: $(<variable name>). Lo script di esempio multipiattaforma seguente visualizza l'ID della pipeline.
- YAML
- Classico
steps:
- script: echo This is pipeline $(System.DefinitionId)
Questa sintassi funziona anche per le variabili definite all'interno della pipeline.
variables:
Example: 'myValue'
steps:
- script: echo The value passed in is $(Example)
Attività Bash
Se sono necessari script più complessi, è consigliabile scriverli in Bash e usare l'attività Bash nella pipeline. La maggior parte degli agenti macOS e Linux usa Bash come shell e gli agenti Windows possono usare Git Bash o sottosistema Windows per Linux Bash. Gli agenti ospitati da Microsoft hanno Bash preinstallato per impostazione predefinita.
L'esempio seguente esegue un'attività Bash che consente di decidere se attivare una compilazione.
- YAML
- Classico
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
Annotazioni
PowerShell è anche un'opzione per gli script. Il pwsh collegamento esegue PowerShell 7.x in macOS, Linux o Windows. Gli agenti devono avere installato PowerShell 7.x. Per impostazione predefinita, gli agenti ospitati da Microsoft hanno Installato PowerShell 7.x.
Cambio basato sulla piattaforma
Lo scripting specifico della piattaforma per duplicare la logica della pipeline causa un lavoro aggiuntivo e un aumento del rischio di errore. Tuttavia, se non è possibile evitare lo scripting specifico della piattaforma, è possibile usare le condizioni per rilevare la piattaforma in uso.
Ad esempio, per ottenere l'indirizzo IP dell'agente di compilazione, è necessario usare ifconfig in macOS, ip addr in Ubuntu Linux e il Get-NetIPAddress cmdlet in Windows PowerShell. La pipeline seguente ottiene tali informazioni dagli agenti in piattaforme diverse usando le condizioni.
- YAML
- Classico
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)