如何在YAML管道中设置和检索条件的变量值



;Deploy_ Frastructure";正在使用变量isInfraCreated。isInfraCreated的值一直返回"unknown",即使PowerShell脚本设置了这些值。我在这里做错了什么?

trigger:
- main
stages:
- stage: development
variables:
isInfraCreated: "unknown"
aksClusterName: "bla-aks"
aksResourceGroup: "bla-aks-resources-01"
jobs:
- job: Prepare
steps:
- task: AzureCLI@2
displayName: 'Azure PowerShell: Determine isInfraCreated'
inputs:
azureSubscription: 'myAzureSubscription'
scriptType: 'pscore'
scriptLocation: 'inlineScript'
inlineScript: |
$aksResource = az aks show --name $(aksClusterName) --resource-group $(aksResourceGroup)
$aksResource
if ($aksResource -eq $null)
{
Write-Host "##vso[task.setvariable variable=isInfraCreated]$false"
$isInfraCreated = $false
$env:isInfraCreated = $false
}
else 
{
Write-Host "##vso[task.setvariable variable=isInfraCreated]$true"
$isInfraCreated = $true
$env:isInfraCreated = $true
}
- job: Deploy_AKS_Infrastructure 
condition: and(succeeded(), eq(variables.isInfraCreated, 'False'))

我不确定这是否是问题所在,但我认为最后一个作业的条件语法应该是这样的:

- job: Deploy_AKS_Infrastructure 
condition: and(succeeded(), eq(variables.isInfraCreated, false))

如何在YAML管道中设置和检索条件的变量值?

要解决此问题,我们需要通过使用任务的输出变量在作业之间共享变量:

  • 若要引用同一作业中不同任务的变量,请使用task.variable
  • 若要引用来自其他作业的任务中的变量,请使用依赖项。JOB.output[任务变量]

因此,我们需要将脚本更新为:

trigger:
- main
stages:
- stage: development
variables:
isInfraCreated: "unknown"
aksClusterName: "bla-aks"
aksResourceGroup: "bla-aks-resources-01"
jobs:
- job: Prepare
steps:
- task: AzureCLI@2
displayName: 'Azure PowerShell: Determine isInfraCreated'
inputs:
azureSubscription: 'myAzureSubscription'
scriptType: 'pscore'
scriptLocation: 'inlineScript'
inlineScript: |
$aksResource = az aks show --name $(aksClusterName) --resource-group $(aksResourceGroup)
$aksResource
if ($aksResource -eq $null)
{
Write-Host "##vso[task.setvariable variable=isInfraCreated;isOutput=true]$false"
$isInfraCreated = $false
$env:isInfraCreated = $false
}
else 
{
Write-Host "##vso[task.setvariable variable=isInfraCreated;isOutput=true]$true"
$isInfraCreated = $true
$env:isInfraCreated = $true
}
name: SetIsInfraCreated
- job: Deploy_AKS_Infrastructure 
variables:
TestisInfraCreated: $[ dependencies.Prepare.outputs['SetIsInfraCreated.isInfraCreated'] ]
condition: and(succeeded(), eq(variables.TestisInfraCreated, 'False')) 

您可以查看文档"如何在Azure Pipelines YAML任务中传递变量"以了解更多详细信息。

最新更新