如何在 YAML 管道中循环访问用户定义的变量?

Chr*_*ris 8 azure azure-devops azure-pipelines azure-pipelines-yaml

我正在尝试循环访问 Azure DevOps YAML 管道中的用户定义变量。
变量已通过 UI 创建:

在此输入图像描述

在此输入图像描述

在我正在使用的 YAML 管道代码下方:

trigger:
- dev
- main

pr:
- dev

pool:
  vmImage: ubuntu-latest

stages:

- stage:
  jobs:
  - job: TestVars
    steps:
    - ${{ each var in variables }}:
      - script: |
          echo ${{ var.key }}
          echo ${{ var.value }}
        displayName: ${{ var.key }}
Run Code Online (Sandbox Code Playgroud)

当运行上述管道时,仅列出系统和构建变量(例如system、system.hostType、build.queuedBy等)。

任何循环用户定义变量的帮助将不胜感激。

YK1*_*YK1 6

不幸的是,没有成功获取 UI 中定义的变量。但是,如果您的变量不是机密,您可以将它们带入 YAML,它们将显示在循环中。

- stage:
  variables:
    myyamlvar: 1000   # this will show up in the loop
  jobs:
  - job: TestVars
    steps:
    - ${{ each var in variables }}:
      - script: |
          echo ${{ var.key }}
          echo ${{ var.value }}
        displayName: ${{ var.key }}
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用运行时构造列出变量,而不是使用编译时表达式,例如:

 - job: TestRuntimeVars
    steps:
      - script: |
          for var in $(compgen -e); do
            echo $var ${!var};
          done
Run Code Online (Sandbox Code Playgroud)

这将列出所有变量,包括 UI 中定义的变量。

  • 由于模板表达式 `${{ }}` 在编译时求值,我认为 UI 中定义的变量(包括变量组)可能不可用,因此如果您需要该循环,则可以在 YAML 中定义变量来解决。 (2认同)

nic*_*snb 4

从您提供的 Microsoft 文档链接中,它指定:

“与普通变量不同,它们不会自动解密为脚本的环境变量。您需要显式映射秘密变量。”

但是,一种解决方法可能是运行 azure cli 任务并使用获取管道变量az pipelines variable list

假设您的目的是获取实际值,在这种情况下这可能还不够。话虽如此,即使您没有在其他管道中使用变量组,您也应该考虑使用它们,因为该组可以链接到 Azure KeyVault并将机密映射为变量。您可以将敏感值存储在 KeyVault 中,并将其链接到变量组,该变量组可以像管道中的常规变量一样使用。

或者,您可以直接从AzureKeyVault 管道任务访问 KeyVault 机密。