如何在 YAML 管道中设置和检索条件的变量值?
How to set and retrieve variable value for condition in YAML Pipelines?
“Deploy_Infrastructure”的条件正在使用变量 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'))
How to set and retrieve variable value for condition in YAML Pipelines?
要解决此问题,我们需要 share variables across jobs 使用任务的输出变量:
- To reference a variable from a different task within the same job, use TASK.VARIABLE.
- To reference a variable from a task from a different job, use dependencies.JOB.outputs['TASK.VARIABLE'].
因此,我们需要将脚本更新为:
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'))
您可以查看文档 How to pass variables in Azure Pipelines YAML tasks 了解更多详情。
“Deploy_Infrastructure”的条件正在使用变量 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'))
How to set and retrieve variable value for condition in YAML Pipelines?
要解决此问题,我们需要 share variables across jobs 使用任务的输出变量:
- To reference a variable from a different task within the same job, use TASK.VARIABLE.
- To reference a variable from a task from a different job, use dependencies.JOB.outputs['TASK.VARIABLE'].
因此,我们需要将脚本更新为:
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'))
您可以查看文档 How to pass variables in Azure Pipelines YAML tasks 了解更多详情。