【问题标题】:Azure DevOps - Dynamically evaluate demand nameAzure DevOps - 动态评估需求名称
【发布时间】:2020-03-04 12:42:25
【问题描述】:

我正在寻找一种在 Azure DevOps .yaml 文件中设置动态需求名称的方法。

目前,我们有一些自托管的构建代理,由 Azure DevOps 服务随机选择,但有时我们需要选择一个代理来调查它为什么不工作(或其他罕见事件)。一种方法是关闭所有其他代理并在所需的代理上运行(它会影响我们的整个 CI/CD)。第二种方法是添加临时管道并将所需代理移动到下一个代理池(这需要时间)。

我认为最好的解决方案是动态设置需求。例如,我可以在变量组中包含这些:

"DemandName" = "IsBuildAgent"

"DemandValue" = "是"

每个代理都会设置这个环境变量,它总是允许每个代理运行管道,但如果我会在运行管道之前设置以下变量。

"DemandName" = "AgentNumber"

"DemandValue" = "BuildAgentNr6"

它将覆盖库变量,并且只有一个代理能够运行此管道。

pool:
  name: MyBuildAgents
  demands: $(DemandName) -equals $(DemandValue)

DemandValue 已正确评估,但现在无法设置 DemandName。 是否有可能以稍微改变的方式实现?也许我应该改变语法?或者也许我应该将此作为新功能提出来?

【问题讨论】:

标签: azure-devops yaml


【解决方案1】:

是否有可能以稍微改变的方式实现?也许我应该改变语法?或者也许我应该将此作为新功能提出来?

你的语法是正确的。

恐怕没有这种开箱即用或稍微改变的方式来实现它。

就像你测试一样,DemandName 不能正确设置。那是因为根据语法规则,等式的左侧被视为 string 而不是 value。这将导致 Azure devops 以字符串 $(DemandName) 的形式查找 demand name,而不是 $(DemandName),然后根据该值查找需求名称。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    您可以为此使用表达式吗?不过,这将要求您为每个可能的需求提供一个代码块。

    pool:
      name: MyBuildAgents
      ${{ if eq(variables['DemandName'],AgentNumber)}}:
        demands: AgentNumber -equals $(DemandValue)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-07
      • 1970-01-01
      • 1970-01-01
      • 2014-06-03
      • 2017-10-14
      • 2017-06-12
      • 2021-06-28
      • 1970-01-01
      相关资源
      最近更新 更多