将管道变量从Designer传递到YAML作业模板

时间:2019-03-18 19:38:21

标签: azure-devops azure-pipelines

最初,我想在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解决方案来实现。

2 个答案:

答案 0 :(得分:1)

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

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)

如果您为此将构建排入队列,您将获得一个带有默认值的参数页面:

Defaults

您可以覆盖:

Override parameters

导致:

Overridden job result

答案 1 :(得分:0)

我遇到了同样的问题。我认为目前这是不可能的。我相信这是针对https://github.com/Microsoft/azure-pipelines-yaml/pull/129