Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Serviços de DevOps do Azure | Azure DevOps Server | Azure DevOps Server 2022 | Azure DevOps Server 2020
Os Pipelines do Azure podem executar pipelines em máquinas Linux, macOS e Windows. Se você usa tecnologias de desenvolvimento multiplataforma, como .NET Core, Node.jsou Python, esses recursos de compilação entre plataformas trazem benefícios e desafios. Por exemplo, a maioria dos pipelines inclui um ou mais scripts para executar durante o processo de compilação, mas a sintaxe do script geralmente difere entre plataformas.
Este artigo explica como você pode usar scripts entre plataformas para oferecer suporte a diferentes plataformas de compilação. Você pode usar uma etapa do Azure Pipelines script para facilitar a escrita de scripts entre plataformas. Você também pode usar condições para direcionar scripts para plataformas específicas.
Etapa de script
A palavra-chave script é um atalho para a tarefa de linha de comando, que executa Bash no Linux e macOS ou cmd.exe no Windows.
Você pode usar script para passar facilmente argumentos para uma ferramenta multiplataforma. A script etapa é executada no interpretador de script nativo de cada plataforma, Bash no macOS e Linux ou cmd.exe no Windows. O exemplo a seguir usa uma script etapa para chamar npm com um conjunto de argumentos.
Variáveis de ambiente
Linha de comando, PowerShell e Bash resolvem variáveis de ambiente de forma diferente. Para acessar um valor fornecido pelo sistema, como PATH, você deve usar uma sintaxe diferente por plataforma.
O Azure Pipelines usa a sintaxe de macro como uma forma multiplataforma de referir-se a variáveis em tempo de execução. As variáveis com sintaxe de macro são processadas antes que uma tarefa seja executada durante o tempo de execução. A variável se expande antes que o shell da plataforma a encontre.
Para usar a sintaxe de macro em um pipeline, envolva o nome da variável da seguinte maneira: $(<variable name>). O exemplo de script multiplataforma a seguir exibe o ID do pipeline.
steps:
- script: echo This is pipeline $(System.DefinitionId)
Essa sintaxe também funciona para variáveis definidas dentro do pipeline.
variables:
Example: 'myValue'
steps:
- script: echo The value passed in is $(Example)
Tarefa Bash
Se você precisar de scripts mais complexos, considere escrevê-los em Bash e usar a tarefa Bash em seu pipeline. A maioria dos agentes macOS e Linux usa o Bash como shell, e os agentes do Windows podem usar o Git Bash ou o Subsistema Windows para Linux Bash. Os agentes hospedados pela Microsoft têm o Bash pré-instalado por padrão.
O exemplo a seguir executa uma tarefa Bash que ajuda a tomar uma decisão sobre acionar ou não uma compilação.
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
Observação
O PowerShell também é uma opção para scripts. O atalho executa o pwsh PowerShell 7.x no macOS, Linux ou Windows. Os agentes devem ter o PowerShell 7.x instalado.
Os agentes hospedados pela Microsoft têm o PowerShell 7.x instalado por padrão.
Comutação baseada em plataforma
A execução de scripts específicos para a plataforma para replicar a lógica do pipeline causa trabalho extra e aumenta o risco de erro. Mas se você não puder evitar scripts específicos da plataforma, poderá usar condições para detetar em qual plataforma você está.
Por exemplo, para obter o endereço IP do agente de compilação, você deve usar ifconfig no macOS, ip addr no Ubuntu Linux e o Get-NetIPAddress cmdlet no Windows PowerShell. O pipeline a seguir obtém essas informações de agentes em diferentes plataformas usando condições.
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)