您好,我不确定这是否可以实现,但这是我的问题!我有两个 YAML 文件。
我们在父变量中设置一个设置变量,并基于其值,即 True/False。我想要运行以下模板。 理想情况下:如果值是 false,它应该进入模板内部,但如果它是 true,它应该落在 else 语句中。
结果(现在发生了什么):无论设置变量如何,它都正在执行 else 语句。
下面是我使用的两个 YAML。
trigger: none
pool: Self Hosted Docker (Linux)
jobs:
- job: A
steps:
- powershell: |
$a="lakshay"
if ($a -eq "lakshay")
{
$skipEnvironmentDeployment = $true
}
else {
$skipEnvironmentDeployment = $false
}
Write-Host "##vso[task.setvariable variable=SkipEnvironmentDeployment;isOutput=true]$skipEnvironmentDeployment"
name: ProduceVar
- powershell: |
Write-Host $(ProduceVar.SkipEnvironmentDeployment)
- ${{ if eq(variables['ProduceVar.SkipEnvironmentDeployment'], 'false') }}:
- template: setvariabletemplate.yml
- ${{ else }}:
- job: C
steps:
- powershell: |
Write-Output "Hello from Job C"
jobs:
- job: B
steps:
- powershell: Write-Host "Hello from Job B"
我查看了文档,但找不到我要找的东西。
要将管道转变为运行,第一步是扩展模板并评估模板表达式。但输出变量仅在运行时可用,因此
setvariabletemplate.yml
不会扩展。有关管道运行顺序的详细信息,请参阅处理管道。
根据您的yaml,您似乎想在
SkipEnvironmentDeployment
的值为false
时运行作业B,否则运行作业C。如果是这样,您可以在条件中使用运行时表达式$[]
。请参阅下面的示例。
父 Yaml
jobs:
- job: A
steps:
- powershell: |
$a="lakshay"
if ($a -eq "lakshay")
{
$skipEnvironmentDeployment = $true
}
else {
$skipEnvironmentDeployment = $false
}
Write-Host "##vso[task.setvariable variable=SkipEnvironmentDeployment;isOutput=true]$skipEnvironmentDeployment"
name: ProduceVar
- powershell: |
Write-Host $(ProduceVar.SkipEnvironmentDeployment)
- job: B
dependsOn: A
condition: eq(dependencies.A.outputs['ProduceVar.SkipEnvironmentDeployment'], 'false')
steps:
- template: mysetvariabletemplate.yml
- job: C
dependsOn: A
condition: eq(dependencies.A.outputs['ProduceVar.SkipEnvironmentDeployment'], 'true')
steps:
- powershell: |
Write-Output "Hello from Job C"
模板 Yaml:
steps:
- powershell: Write-Host "Hello from Job B"