条件表达式在 Azure DevOps 2019 中不起作用

Conditional Expression not working in Azure DevOps 2019

我正在尝试有条件地执行 Azure DevOps Server 2019 中的一个步骤。我按照说明进行操作 here

我正在将 runTests 参数传递给我的模板。起初我在 Job 上尝试了一个条件,但是那不起作用,因为它总是使用模板中的默认值,所以我切换到一个条件表达式。我的工作 YAML 现在看起来像

- job: TestJob
  pool: 'mypool'    
  #condition: eq('${{ parameters.runTests }}', 'true')
  workspace:
    clean: all
  steps:
  - script: echo ${{ parameters.runTests }}
  - script: echo ${{ eq(parameters.runTests, 'true') }}
  - ${{ if eq(parameters.runTests, 'true') }}:
    - task: UiPathTest@2
      inputs:
        testTarget: 'TestProject'
        orchestratorConnection: 'Orch'
        testProjectPath: '$(Build.SourcesDirectory)$(projectPath)'
        folderName: $(folderName)

我添加了行来回显参数和表达式的结果。参数值为'true',是正确的,但是eq(parameters.runTests, 'true')的结果总是false。不过,我的 YAML 几乎与示例相同。任何想法可能是错误的?我没有任何错误。该步骤不存在。

我创建了一个类似的管道,但是,添加了参数定义并为参数值指定了类型。

parameters:
- name: runTests
  type: boolean

jobs:
  - job: TestJob
    #condition: eq('${{ parameters.runTests }}', 'true')
    workspace:
      clean: all
    steps:
    - script: echo ${{ parameters.runTests }}
    - script: echo ${{ eq(parameters.runTests, True) }}
    - ${{ if eq(parameters.runTests, True) }}:
      - task: Bash@3
        inputs:
          targetType: 'inline'
          script: |
            echo 'Hello world'

触发管道时,我选中 runTests 框

以下步骤按预期执行,两个 echo 步骤 return True 加上条件 bash 脚本也被执行。

我建议将此参数设置为布尔值并将其与布尔值 True 而不是字符串 'true'

进行比较

事实证明,造成差异的是

variables:
  runTests: 'true'

---

jobs:
- template: template.yaml@templates  # Template reference
  parameters:
    runTests: $(runTests)

与跳过变量

---

jobs:
- template: template.yaml@templates  # Template reference
  parameters:
    runTests: 'true'

不知道为什么。