Azure Devops:如何使用 if 语句设置组变量

Posted

技术标签:

【中文标题】Azure Devops:如何使用 if 语句设置组变量【英文标题】:Azure Devops: How to set group variable with if statement 【发布时间】:2020-07-13 09:11:42 【问题描述】:

我正在尝试根据管道中存在的一个变量来设置变量组。 yaml 看起来像这样:

但是当我运行管道时出现以下错误:

如果我删除 "- group : QA""- group : PROD" 管道运行没有任何问题。我做错了什么?

【问题讨论】:

【参考方案1】:

这是略有不同的解决方案,但您可以实现您的目标 - 如果我理解变量组的条件选择。

您可以使用运行时参数:

parameters:
- name: environment
  displayName: Environment
  type: string
  default: QA
  values:
  - QA
  - PROD

stages:
- stage:
  displayName: 'Build and Restore'
  variables:
  - group: $ parameters.environment 
  jobs:
    - job:
      steps:
      - script: echo $(name)

除了运行构建,您还可以选择您的环境:

注意:我在两个组中定义了两个变量组 QA 和 PROD,变量名。

【讨论】:

我真的很喜欢你的方法!效果很好,谢谢!【参考方案2】:

尝试以下架构:

variables:
  isProd: true

stages:
- stage: Test
  displayName: Build and restore
  variables:
  - $ if eq(variables['isProd'], 'false') :
    - group: QA
  - $ if eq(variables['isProd'], 'true') :
    - group: PROD
  jobs:
  - job: A
    steps:
    - bash: echo $(groupname)

注意:您在定义上述 YAML scipt 时可能会收到一些红色警告。忽略那个令人困惑的警告并继续运行它。

【讨论】:

它对我不起作用。我能做错什么? ==================================================== ============================= 生成脚本。脚本内容: echo $(groupname) =========================== 开始命令输出 ============= ============== /bin/bash --noprofile --norc /home/vsts/work/_temp/f1c09eb7-1ef2-43ab-b0e6-7a4905c67b8d.sh /home/vsts/work /_temp/f1c09eb7-1ef2-43ab-b0e6-7a4905c67b8d.sh: line 1: groupname: command not found Finishing: Bash @Krzysztof,QAPROD 变量组是否已在您的 Library 中创建? 好的。所以 groupname 是组内的变量,对吧?它不是内置变量 :) 一切正常。假设 groupname 是包含已使用组的内置变量,我犯了错误。 @Krzysztof 不,QA 和 PROD 只是变量组名称,它们不存储在任何组中。我的意思是你需要像这样创建这个变量组:imgur.com/a/rr7z1sX @Merlin Liang - MSFT 是的,我知道。我的错误是我没有在组 QA 和 PROD 中创建组名变量。一切都很好。非常感谢!

以上是关于Azure Devops:如何使用 if 语句设置组变量的主要内容,如果未能解决你的问题,请参考以下文章

Azure DevOps系列Azure DevOps构建.NET EFCore应用程序

如何使用 Yarn 注册表作为 Azure DevOps 工件上游源?

在 VS Code 和 TypeScript 中调试 Azure DevOps 自定义任务时如何设置输入变量

isUpgrade 设置如何影响 Azure DevOps 中 Service Fabric 应用程序部署任务中的部署过程

如何将 Azure DevOps Extension for Azure CLI 与 Azure DevOps Server 一起使用?

如何在 Azure DevOps 的 OWASP ZAP 扫描中使用 XSLT 文件添加误报?