首页 > 解决方案 > 将管道变量从 Designer 传递到 YAML 作业模板

问题描述

我最初想在我的队列中定义管道变量azure-pipelines.yml,我可以选择在队列时间设置,但目前似乎不支持:可以在队列时间设置的变量只能在设计器中定义。这个变量(逗号分隔)被命名nx_versions并将用于构建矩阵策略。这是一个最小的例子:

# azure-pipelines.yml
jobs:
- template: job-template.yml
  parameters:
    nx_versions: $(nx_versions)

# job-template.yml
parameters:
  nx_versions: 
    - 1

jobs:
  - job: build
    strategy:
      matrix:
        ${{ each nxver in parameters.nx_versions }}:
          NX_${{ nxver }}:
            NXVersion: ${{ nxver }}
    steps:
      - powershell: echo $(NXVersion)

nx_versions = 2,3使用(值实际上并不重要)对构建进行排队会导致错误:

/job-template.yml (Line: 9, Col: 9): Expected a sequence or mapping. Actual value '$(nx_versions)'

这甚至可能吗?我也尝试过使用${{ nx_versions }}${{ variables.nx_versions }}但无济于事。

这可以通过完整的 Designer 解决方案实现。

标签: azure-devopsazure-pipelines

解决方案


琐碎的管道(不引用模板,但可以轻松扩展)

parameters:
- name: nx_versions
  type: object
  default: 
  - 1
  - 4

jobs:
  - job: build
    strategy:
      matrix:
        ${{ each nxver in parameters.nx_versions }}:
          NX_${{ nxver }}:
            NXVersion: ${{ nxver }}
    steps:
      - powershell: echo $(NXVersion)

扩展到

parameters:
- name: nx_versions
  type: object
  default:
  - 1
  - 4
stages:
- stage: __default
  jobs:
  - job: build
    strategy:
      matrix:
        NX_1:
          NXVersion: 1
        NX_4:
          NXVersion: 4
    steps:
    - task: PowerShell@2
      inputs:
        targetType: inline
        script: echo $(NXVersion)

如果你为此排队构建,你会得到一个带有默认值的参数页面:

默认值

您可以覆盖:

覆盖参数

这导致:

覆盖的作业结果


推荐阅读