条件表达式在 Azure DevOps 2019 中不起作用
Posted
技术标签:
【中文标题】条件表达式在 Azure DevOps 2019 中不起作用【英文标题】:Conditional Expression not working in Azure DevOps 2019 【发布时间】: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 将始终在该条件下使用默认值,而不是传入的值。
【参考方案1】:
我创建了一个类似的管道,但是为参数值添加了参数定义和指定类型。
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
步骤均返回 True
另外还会执行条件 bash 脚本。
我建议将此参数设置为布尔值并将其与布尔值True
进行比较,而不是字符串'true'
【讨论】:
是在 Azure DevOps Server 2019 上吗?这就是我遇到问题的地方。我不认为我可以在 2019 年定义这样的参数。我也通过使用文件作为模板来传递参数。【参考方案2】:事实证明,造成差异的是
variables:
runTests: 'true'
---
jobs:
- template: template.yaml@templates # Template reference
parameters:
runTests: $(runTests)
vs 跳过变量
---
jobs:
- template: template.yaml@templates # Template reference
parameters:
runTests: 'true'
我不知道为什么。
【讨论】:
以上是关于条件表达式在 Azure DevOps 2019 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
azure devops cloud 和 azure devops server 2019 之间的区别
Azure DevOps 管道条件 - 为啥包含“并且始终”?
如何:在 Azure DevOps YAML 中有条件地插入模板?
Azure 拉取请求 | Azure Devops - “您必须在 '+' 运算符之后提供值表达式。”