【问题标题】:Azure Build Pipelines: reference predefined variable from expressionAzure Build Pipelines:从表达式中引用预定义变量
【发布时间】:2020-06-13 09:44:17
【问题描述】:

我想在 Azure 构建管道中使用表达式中的 predefined variable 的值。

它遵循 YML 定义:

trigger:
- none

pool:
  vmImage: 'ubuntu-latest'

steps:
- script: echo ${{ format('{0}-vars', variables['Build.Repository.Name']) }} # outcome: -vars
- script: echo ${{ format('{0}-vars', 'a_string') }} # outcome: a_string-vars

我仍然不是这个环境的专家,但我很清楚variables['Build.Repository.Name'] 没有解决。在使用 $(Build.Repository.Name) 的表达式之外完美工作

表达式中引用预定义变量的正确方法是什么? (我无法在文档中找到它)。

非常感谢任何帮助!

【问题讨论】:

    标签: azure continuous-integration yaml


    【解决方案1】:

    请查看this article,以便获得有关可用变量和表达式语法的更多信息。但是,总而言之,就在表达式中使用变量而言,您有两种方法:

    • 索引语法:变量['MyVar']
    • 属性取消引用语法:variables.MyVar

    【讨论】:

    • 感谢您的回复,我知道那个文件。我已经尝试过variables.Build.Repository.Name,但仍然没有解决。这里的问题是我想在一个表达式中访问一个预定义变量。也许不可能……
    • 在我上面分享的文章中,您有如何在表达式中使用变量的示例,但重要的细节,如文档中所引用,是:“根据执行上下文,不同的变量是可用。如果您使用 YAML 创建管道,则管道变量可用。如果您使用经典编辑器创建构建管道,则构建变量可用。如果您使用经典编辑器创建发布管道,则发布变量可用。"
    • 因此,由于您使用 YAML 创建管道,因此您有可用的管道变量 - 遵循您可用的变量列表。 - docs.microsoft.com/en-us/azure/devops/pipelines/build/…
    • 因此,根据文档,如果您希望构建变量可用,则需要使用经典编辑器来创建构建管道。这至少是我的假设。
    • 但最重要的是,这是您的问题“在表达式中引用预定义变量的正确方法是什么?(我无法在文档中找到它)。”。我给了你问题的答案。现在,我们转向另一个问题,即“在我的构建管道和上下文中哪些预定义变量可用?”。
    【解决方案2】:

    按照documentation 的正确做法是使用

     repository: $(Build.Repository.Name)
    

    但是,只要您有条件检查,您就可以使用,

    condition: and(succeeded(), eq(variables['Build.Repository.Name'], 'Sample'))
    

    【讨论】:

    • 感谢您的回复,但我需要它的表达式。我想在设置变量组名时添加一个字符串。
    【解决方案3】:

    我可能将 Azure DevOps 中使用的“模板”的两种不同含义混为一谈,但我认为问题在于您用于表达式的语法。当您执行以下操作时:

    ${{ format('{0}-vars', variables['Build.Repository.Name']) }}
    

    您正在使用template expression syntax(即${{variable}} 语法)。

    很好,但我认为“在模板中可用?” this table 中的列是您的问题。对于Build.Repository.Name 变量,它说“否”。

    同样,我可能弄错了,但我认为这意味着该变量(无论出于何种原因)不能与该表达式语法一起使用。

    我想如果你使用runtime expression syntax,你会得到你想要的行为。

    即这个:

    $[format('{0}-vars', variables['Build.Repository.Name'])]
    

    这一直在我正在研究的管道中为我工作。

    不过要小心,似乎有一个bug,如果您使用property dereference syntax(即variables.Build.Repository.Name),您将得到与当前问题相同的症状。这也发生在我身上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-08
      • 2021-02-10
      • 2020-06-09
      • 2015-03-09
      • 1970-01-01
      • 2020-07-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多