条件表达式在 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'
不知道为什么。
我正在尝试有条件地执行 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
我建议将此参数设置为布尔值并将其与布尔值 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'
不知道为什么。