【发布时间】:2021-12-08 16:01:47
【问题描述】:
我正在尝试有条件地在 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 几乎与示例相同。有什么想法可能是错的吗?我没有任何错误。该步骤不存在。
【问题讨论】:
-
根据您的情况,删除参数名称周围的
'${{ ... }}'。条件语法将理解您试图在那里引用一个变量。可以选择在完整条件周围添加$[ ...]。 -
不幸的是,这不起作用。 “由于存在验证错误或警告,无法将构建排队。/project-pipeline-template.yaml@templates(第 29 行,第 5 列):意外值 'if eq(parameters.runTests, 'true')'”
-
这是 Azure DevOps Server 2019
-
为什么你的条件行用 # 注释掉了?
-
因为这不适用于 DevOps Server 2019 中的参数。我正在对其进行测试并将其保留。Server 2019 将始终在该条件下使用默认值,而不是传入的值。
标签: azure-devops azure-pipelines-yaml azure-devops-server-2019