Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Serviços de DevOps do Azure | Azure DevOps Server | Azure DevOps Server 2022
Quando você usa scripts PowerShell e Bash em seus pipelines, geralmente é útil poder definir variáveis que você pode usar em tarefas futuras. As variáveis recém-definidas não estão disponíveis na mesma tarefa.
Os scripts são ótimos para quando você quer fazer algo não suportado por uma tarefa. Por exemplo, você pode usar um script para chamar uma API REST personalizada e analisar a resposta.
Você usa o comando task.setvariable logging para definir variáveis em scripts de PowerShell e Bash.
Nota
Os trabalhos de implantação usam uma sintaxe diferente para variáveis de saída. Para saber mais sobre o suporte para variáveis de saída em trabalhos de implantação, consulte Trabalhos de implantação.
Para usar uma variável com uma condição em um pipeline, consulte Especificar condições.
Sobre nós task.setvariable
Quando você adiciona uma variável com task.setvariable, as tarefas a seguir podem usar a variável usando sintaxe de macro $(myVar). A variável só está disponível para tarefas no mesmo trabalho por padrão. Se você adicionar o parâmetro isOutput, a sintaxe para chamar sua variável será alterada. Para obter mais informações, consulte Definir uma variável de saída para uso no mesmo trabalho.
Defina a variável myVar com o valor foo.
- bash: |
echo "##vso[task.setvariable variable=myVar;]foo"
Leia a variável myVar:
- bash: |
echo "You can use macro syntax for variables: $(myVar)"
Definir propriedades de variáveis
O comando task.setvariable inclui propriedades para definir uma variável como secreta, como variável de saída e como só de leitura. As propriedades disponíveis incluem:
-
variable= nome da variável (Obrigatório) -
isSecret= booleano (Opcional, o padrão é false) -
isOutput= booleano (Opcional, o padrão é false) -
isReadOnly= booleano (Opcional, o padrão é false)
Para usar a variável na próxima etapa, defina a isOutput propriedade como true. Para fazer referência a uma variável com o isOutput definido como true, inclua o nome da tarefa. Por exemplo, $(TaskName.myVar).
Quando você define uma variável como somente leitura, as tarefas downstream não podem substituí-la. Defina isreadonly como true. Definir uma variável como somente leitura aumenta a segurança, tornando essa variável imutável.
Definir uma variável como secreta
Quando issecret for definido como true, o valor da variável será salvo como secreto e mascarado dos logs.
Nota
O Azure Pipelines faz um esforço para mascarar segredos quando emite dados nos logs de pipeline, podendo, assim, aparecer variáveis adicionais e dados mascarados na saída e nos logs que não estão definidos como segredos.
Defina a variável mySecretValsecreta .
- bash: |
echo "##vso[task.setvariable variable=mySecretVal;issecret=true]secretvalue"
Obtenha a variável mySecretValsecreta .
- bash: |
echo "##vso[task.setvariable variable=mySecretVal;issecret=true]secretvalue"
- bash: |
echo $(mySecretVal)
Saída de variável secreta em bash.
Níveis de variáveis de saída
Existem quatro tipos diferentes de variáveis de saída com sintaxes distintas:
-
Variáveis de saída definidas no mesmo trabalho sem o
isOutputparâmetro. Para fazer referência a essas variáveis, use a sintaxe de macro. Exemplo:$(myVar). -
Variáveis de saída definidas no mesmo trabalho com o
isOutputparâmetro. Para fazer referência a essas variáveis, inclua o nome da tarefa. Exemplo:$(myTask.myVar). -
Variáveis de saída definidas em um trabalho futuro. Para referenciar essas variáveis, utilize a variável na seção
variablescom a sintaxedependency. -
Variáveis de saída definidas em estágios futuros. Para referenciar essas variáveis, utilize a variável na seção
variablescom a sintaxestageDependencies.
Nota
Estágios ou trabalhos futuros só podem acessar variáveis de saída se dependerem do estágio ou do trabalho em que a variável foi definida. Para tornar uma variável de saída acessível, certifique-se de que o próximo estágio ou trabalho depende do estágio ou trabalho onde você criou a variável. Se vários estágios ou trabalhos precisarem usar a mesma variável de saída, use a dependsOn condição para estabelecer essa dependência.
O nome de uma variável de saída pode mudar se o seu pipeline usar uma estratégia de execução como um trabalho de matriz. Para esses casos, envie sua variável para teste primeiro para verificar seu nome. Você também pode imprimir todas as variáveis disponíveis em um pipeline com o script env.
- script: env
displayName: 'Print all variables'
Definir uma variável de saída para uso no mesmo trabalho
Quando você usa uma variável de saída no mesmo trabalho, não é necessário usar a isOutput propriedade. Por padrão, a variável está disponível para etapas downstream dentro do mesmo trabalho. No entanto, se você adicionar a propriedade isOutput, precisará fazer referência à variável com o nome da tarefa.
O script aqui define a variável myJobVar de saída do mesmo trabalho sem especificar isOutput e define myOutputJobVar com isOutput=true.
jobs:
- job: A
steps:
- bash: |
echo "##vso[task.setvariable variable=myJobVar]this is the same job"
- bash: |
echo "##vso[task.setvariable variable=myOutputJobVar;isOutput=true]this is the same job too"
name: setOutput
Este script obtém as variáveis do mesmo trabalho myJobVar e myOutputJobVar. Observe que a sintaxe muda para referenciar uma variável de saída uma vez que isOutput=true é adicionada.
jobs:
- job: A
steps:
- bash: |
echo "##vso[task.setvariable variable=myJobVar]this is the same job"
- bash: |
echo "##vso[task.setvariable variable=myOutputJobVar;isOutput=true]this is the same job too"
name: setOutput
- bash: |
echo $(myJobVar)
- bash: |
echo $(setOutput.myOutputJobVar)
Definir uma variável de saída para uso em trabalhos futuros
Ao usar variáveis de saída entre trabalhos, você as referencia com dependencies. A sintaxe para acessar uma variável de saída em um trabalho ou estágio futuro varia com base na relação entre o setter e o consumidor da variável. Saiba mais sobre cada caso em dependências.
As variáveis de saída só estão disponíveis no próximo trabalho a jusante. Se vários trabalhos consumirem a mesma variável de saída, use a dependsOn condição.
Primeiro, defina a variável myOutputVarde saída .
jobs:
- job: A
steps:
- bash: |
echo "##vso[task.setvariable variable=myOutputVar;isOutput=true]this is from job A"
name: passOutput
Em seguida, acesse myOutputVar em um trabalho futuro e produza a variável como myVarFromJobA. Para usar o dependencies, é necessário definir a propriedade dependsOn na tarefa futura com base no nome da tarefa passada na qual a variável de saída foi definida.
jobs:
- job: A
steps:
- bash: |
echo "##vso[task.setvariable variable=myOutputVar;isOutput=true]this is from job A"
name: passOutput
- job: B
dependsOn: A
variables:
myVarFromJobA: $[ dependencies.A.outputs['passOutput.myOutputVar'] ]
steps:
- bash: |
echo $(myVarFromJobA)
Definir uma variável de saída para uso em estágios futuros
As variáveis de saída podem ser usadas entre estágios em pipelines. Você pode usar variáveis de saída para passar informações úteis, como a ID de uma saída gerada, de um estágio para o próximo.
Ao definir uma variável com a propriedade isOutput, você pode fazer referência a essa variável em estágios posteriores utilizando o nome da tarefa e a sintaxe stageDependencies. Saiba mais sobre dependências.
As variáveis de saída só estão disponíveis na próxima fase descendente. Se vários estágios consumirem a mesma variável de saída, use a dependsOn condição.
Primeiro, defina a variável myStageValde saída .
steps:
- bash: echo "##vso[task.setvariable variable=myStageVal;isOutput=true]this is a stage output variable"
name: MyOutputVar
Em seguida, em um estágio futuro, mapeie a variável myStageVal de saída para um estágio, trabalho ou variável de escopo de tarefa como, por exemplo, myStageAVar. Note que a sintaxe de mapeamento usa uma expressão de tempo de execução $[] e rastreia o caminho desde stageDependencies até à variável de saída, usando o nome do estágio (A) e o nome do trabalho (A1) para qualificar totalmente a variável.
stages:
- stage: A
jobs:
- job: A1
steps:
- bash: echo "##vso[task.setvariable variable=myStageVal;isOutput=true]this is a stage output variable"
name: MyOutputVar
- stage: B
dependsOn: A
jobs:
- job: B1
variables:
myStageAVar: $[stageDependencies.A.A1.outputs['MyOutputVar.myStageVal']]
steps:
- bash: echo $(myStageAVar)
Caso seu valor contenha novas linhas, você pode escapar delas e o agente automaticamente a desliga:
steps:
- bash: |
escape_data() {
local data=$1
data="${data//'%'/'%AZP25'}"
data="${data//$'\n'/'%0A'}"
data="${data//$'\r'/'%0D'}"
echo "$data"
}
echo "##vso[task.setvariable variable=myStageVal;isOutput=true]$(escape_data $'foo\nbar')"
name: MyOutputVar
FAQ
Minha variável de saída não está renderizando. O que está a correr mal?
Há algumas razões pelas quais sua variável de saída pode não aparecer.
- As variáveis de saída definidas com
isOutputnão estão disponíveis no mesmo trabalho e, em vez disso, só estão disponíveis em trabalhos a jusante. - Dependendo da sintaxe de variável usada, uma variável que define o valor de uma variável de saída pode não estar disponível em tempo de execução. Por exemplo, variáveis com sintaxe de macro (
$(var)) são processadas antes da execução de uma tarefa. Em contraste, as variáveis com sintaxe de modelo são processadas em tempo de execução ($[variables.var]). Você geralmente deseja usar a sintaxe de tempo de execução ao definir variáveis de saída. Para obter mais informações sobre sintaxe de variáveis, consulte Definir variáveis. - Pode haver espaços extras na sua expressão. Se a variável não estiver a renderizar, verifique se há espaços extras ao redor de
isOutput=true.
Você pode solucionar problemas na dependencies saída para um trabalho ou uma fase de pipeline adicionando uma variável para as dependências e depois imprimindo essa variável. Por exemplo, neste trabalho de pipeline, A define a variável de saída MyTask. O segundo emprego (B) depende do trabalho A. Uma nova variável, deps contém a representação JSON das dependências de emprego. A segunda etapa da Tarefa B usa o PowerShell para exibir deps, de forma a poder visualizar as dependências da tarefa.
trigger:
- '*'
pool:
vmImage: 'ubuntu-latest'
jobs:
- job: A
steps:
- script: |
echo "##vso[task.setvariable variable=MyTask;isOutput=true]theoutputval"
name: ProduceVar
- job: B
dependsOn: A
variables:
varFromA: $[ dependencies.A.outputs['ProduceVar.MyTask'] ]
deps: $[convertToJson(dependencies)] # create a variable with the job dependencies
steps:
- script: echo $(varFromA) #
- powershell: Write-Host "$(deps)"