Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022
Azure Pipelines peut exécuter des pipelines sur des machines Linux, macOS et Windows. Si vous utilisez des technologies de développement multiplateformes telles que .NET Core, Node.jsou Python, ces fonctionnalités de génération multiplateforme apportent des avantages et des défis. Par exemple, la plupart des pipelines incluent un ou plusieurs scripts à exécuter pendant le processus de génération, mais la syntaxe de script diffère souvent sur les plateformes.
Cet article explique comment utiliser des scripts multiplateformes pour prendre en charge différentes plateformes de compilation. Vous pouvez utiliser une étape Azure Pipelines script pour faciliter l’écriture de scripts multiplateformes. Vous pouvez également utiliser des conditions pour cibler des scripts sur des plateformes spécifiques.
Étape de script
Le mot clé de script est un raccourci pour la tâche de ligne de commande, qui exécute Bash sur Linux et macOS ou cmd.exe sur Windows.
Vous pouvez utiliser script pour transmettre facilement des arguments à un outil multiplateforme. L’étape script s’exécute dans l’interpréteur de script natif de chaque plateforme, Bash sur macOS et Linux ou cmd.exe sur Windows. L’exemple suivant utilise une script étape pour appeler npm avec un ensemble d’arguments.
Variables d'environnement
La ligne de commande, PowerShell et Bash résolvent les variables d’environnement différemment. Pour accéder à une valeur fournie par le système comme PATH, vous devez utiliser une syntaxe différente par plateforme.
Azure Pipelines utilise la syntaxe des macros comme moyen multiplateforme de faire référence aux variables au moment de l’exécution. Les variables avec la syntaxe macro sont traitées avant qu’une tâche ne s’exécute pendant l’exécution. La variable se développe avant que l’interpréteur de commandes de plateforme ne le rencontre.
Pour utiliser la syntaxe de macro dans un pipeline, entourez le nom de la variable comme suit : $(<variable name>). L’exemple de script multiplateforme suivant fait écho à l’ID du pipeline.
steps:
- script: echo This is pipeline $(System.DefinitionId)
Cette syntaxe fonctionne également pour les variables que vous définissez dans le pipeline.
variables:
Example: 'myValue'
steps:
- script: echo The value passed in is $(Example)
Tâche Bash
Si vous avez besoin de scripts plus complexes, envisagez de les écrire dans Bash et d’utiliser la tâche Bash dans votre pipeline. La plupart des agents macOS et Linux utilisent Bash comme interpréteur de commandes, et les agents Windows peuvent utiliser Git Bash ou le sous-système Windows pour Linux Bash. Par défaut, les agents hébergés par Microsoft ont préinstallé Bash.
L’exemple suivant exécute une tâche Bash qui permet de prendre une décision sur le déclenchement d’une build.
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
Note
PowerShell est également une option pour les scripts. Le pwsh raccourci exécute PowerShell 7.x sur macOS, Linux ou Windows. Les agents doivent avoir installé PowerShell 7.x.
Les agents hébergés par Microsoft ont installé PowerShell 7.x par défaut.
Commutation basée sur la plateforme
Le script spécifique à la plateforme pour dupliquer la logique de pipeline entraîne un travail supplémentaire et un risque d’erreur accru. Mais si vous ne pouvez pas éviter les scripts spécifiques à la plateforme, vous pouvez utiliser des conditions pour détecter la plateforme sur laquelle vous vous trouvez.
Par exemple, pour obtenir l’adresse IP de l’agent de build, vous devez utiliser ifconfig sur macOS, ip addr sur Ubuntu Linux et l’applet Get-NetIPAddress de commande sur Windows PowerShell. Le pipeline suivant obtient ces informations à partir d’agents sur différentes plateformes en utilisant des conditions.
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)