在 Azure Pipelines 中调用模板时,我们可以在条件语句中使用运行时变量吗?

问题描述 投票:0回答:1

您好,我不确定这是否可以实现,但这是我的问题!我有两个 YAML 文件。

  1. 父 Yaml:SetVariable.yml
  2. 模板 Yaml:setvariabletemplate.yml

我们在父变量中设置一个设置变量,并基于其值,即 True/False。我想要运行以下模板。 理想情况下:如果值是 false,它应该进入模板内部,但如果它是 true,它应该落在 else 语句中。

结果(现在发生了什么):无论设置变量如何,它都正在执行 else 语句。

下面是我使用的两个 YAML。

  1. 父 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" 
  1. 模板 Yaml
jobs:
- job: B
  steps:
    - powershell: Write-Host "Hello from Job B"

我查看了文档,但找不到我要找的东西。

azure-devops yaml continuous-integration azure-pipelines azure-pipelines-yaml
1个回答
0
投票

要将管道转变为运行,第一步是扩展模板并评估模板表达式。但输出变量仅在运行时可用,因此

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"
© www.soinside.com 2019 - 2024. All rights reserved.