代码之家  ›  专栏  ›  技术社区  ›  gsscoder

Azure构建管道:引用表达式中的预定义变量

  •  0
  • gsscoder  · 技术社区  · 6 年前

    我想用a的值 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) 完美的作品 .

    什么是正确的参考方法 预定义变量 在一个 表示 ? (我在文档中找不到它)。

    非常感谢您的帮助!

    2 回复  |  直到 6 年前
        1
  •  1
  •   Hugo Barona    6 年前

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

    • 索引语法:变量['MyVar']
    • 属性取消引用语法:变量。米瓦尔
        2
  •  0
  •   Sajeetharan    6 年前

    正确的方法是按照 documentation 将使用

     repository: $(Build.Repository.Name)
    

    然而,只要你有条件检查,你可以使用,

    condition: and(succeeded(), eq(variables['Build.Repository.Name'], 'Sample'))
    
        3
  •  0
  •   Adam Goodwin    6 年前

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

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

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

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

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

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

    i、 e.这:

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

    这在我正在开发的管道中对我起到了作用。

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