Azure DevOps管道变量格式用法

Azure DevOps Pipeline variables format usage

提问人:user2572309 提问时间:11/9/2023 更新时间:11/10/2023 访问量:71

问:

我在Azure DevOps管道中的变量方面遇到了问题。我无法在 if 语句中有效地使用它们,也无法将其用作值参数中的占位符。

这是一个相关的问题,但答案对我不起作用。

我在顶级管道 .yml 文件中定义了一个这样的变量。

variables:
- name: artifact_source
  readonly: true
  value: 'ecu'

- name: artifact_getter
  readonly: true
  value: 'get_artifacts_ecu.yaml'

在较低级别的模板文件中,我想像这样使用它们:

    # Get binaries
    - template: $(artifact_getter)
      parameters:
        variant: ${{ parameters.variant }}

给我这个错误:在存储库中找不到文件 /.azuredevops/template/$(artifact_getter)。

jobs:
  - job: ${{ parameters.variant }}
    pool: ${{ parameters.pool }}
    steps:

    # Clean checkout
    - checkout: self
      clean: true

    # Get binaries
    - ${{ if eq( $(artifact_source), 'ecu') }}:
      - template: get_artifacts_ecu.yml
        parameters:
          variant: ${{ parameters.variant }}

这给出了一个错误:无法识别的值:“$”。位于表达式中的位置 5:eq( $(artifact_source), 'ecu')。如需更多帮助,请参阅 https://go.microsoft.com/fwlink/?linkid=842996

我想知道我应该使用什么格式来获取此处变量的值。我看到了如何引用变量的不同形式:

${{ variables.artifact_source }}
$[variables.var]
$env:artifact_source
$(artifact_source)  # only one working for variables

此处也记录了此内容。但我只能去上班,但就我而言不行。$(name)

如何使用变量切换到其他模板?

模板 变量 azure-devops azure-pipelines

评论


答:

0赞 Miao Tian-MSFT 11/10/2023 #1

在表达式文档中,它提到作为表达式的一部分,您可以使用以下两种语法之一访问变量:

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

所以,你可以使用或这里。eq(variables['artifact_source'], 'ecu')eq(variables.artifact_source, 'ecu')

# Get binaries
- ${{ if eq(variables['artifact_source'], 'ecu') }}:
  - template: get_artifacts_ecu.yml
    parameters:
      variant: ${{ parameters.variant }}

# Get binaries
- ${{ if eq(variables.artifact_source, 'ecu') }}:
  - template: get_artifacts_ecu.yml
    parameters:
      variant: ${{ parameters.variant }}

评论

0赞 user2572309 11/10/2023
谢谢你的推理,我想我被各种格式搞砸了。我以为我已经尝试了所有变体,但现在它起作用了。多谢!