【问题标题】:Variable won't equal string in Azure DevOps YAML if statementAzure DevOps YAML if 语句中的变量不等于字符串
【发布时间】:2021-03-20 00:20:00
【问题描述】:

遇到问题了。

给定:

variables: 
  binType: 'zip'
  zip: 'zip'

以下失败:

- ${{ if eq(variables['binType'], 'zip') }}:
  - script: 'echo string test worked'

以下工作:

- ${{ if eq(variables['binType'], variables['zip']) }}:
  - script: 'echo var test worked'

【问题讨论】:

  • 嗨@Josh Coffin。我已经测试了样品,它可以正常工作。您可以参考答案并检查它是否有效。如果仍然遇到同样的问题,您可以编辑您的问题并分享错误消息。如果您无法运行管道,则可能是格式问题。您可以分享您的完整样本。
  • 这张票有更新吗?如果这些建议能给你一些帮助,请随时告诉我。只是提醒this
  • 好吧,在我的头撞墙很长一段时间之后,事实证明如果你从另一个模板中提取变量将无法在 if 语句中解析。参数,是的。变量,没有。至少,我找不到任何形式。后一个示例有效,因为两个值都为空。
  • 嗨@Josh Coffin。请参考我的更新。模板中的变量可以成功传递。如果您仍然有同样的问题,您可以与我们分享您的完整样本。

标签: if-statement azure-devops yaml


【解决方案1】:

据我所知,Azure Devops Yaml 中的变量是String 类型。所以你的 if 表达式应该可以正常工作。

我测试了相同的 Yaml 示例:

pool:
  vmImage: windows-latest

variables: 
  binType: 'zip'


steps:
- ${{ if eq(variables['binType'], 'zip') }}:
  - script: 'echo string test worked'

它可以正常工作。

您可以尝试复制我的示例并检查它是否有效。

更新:

如果使用模板传递变量,则需要引用模板。

这是一个例子:

var.yml:

variables: 
  binType: 'zip'
  zip: 'zip'

天蓝色管道.yml:

trigger:
- main

pool:   
  vmImage: ubuntu-latest

variables:
- template: var.yml  

steps:
- ${{ if eq(variables['binType'], 'zip') }}:
  - script: 'echo string test worked'

更多详情可以参考this doc

【讨论】:

  • 在任务中写入输出的变量怎么样,您想根据下一个任务(同一阶段,同一工作?)@Kevin Lu-MSFT 的条件检查此变量。文档没有提到这个 afaik
  • nvm,通过反复试验发现它。应该是eq(variables['taskName.binType'], 'zip')
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-13
  • 1970-01-01
  • 2012-11-01
  • 2018-12-15
  • 1970-01-01
相关资源
最近更新 更多