Azure生成管道:从表达式引用预定义变量

时间:2020-02-29 14:21:47

标签: azure continuous-integration yaml

我想使用 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)的表达式之外完全有效

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

任何帮助都非常感谢!

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

按照documentation进行操作的正确方法是使用

 repository: $(Build.Repository.Name)

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

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

答案 2 :(得分:0)

我可能会混淆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),您将得到与当前问题相同的症状。这件事也在我身上发生。