使用参数在Azure DevOps yaml模板中的多个需求

时间:2020-08-13 08:19:12

标签: azure-devops yaml

我正在尝试找出使用demands的{​​{1}}的{​​{1}}模板中的pool模板为yaml指定Azure DevOps的语法

所以我有一个像这样的模板:

parameters

并这样称呼它:

parameters:
  pool: ''
  demands: ''

jobs:
- job: 'Job1'
  pool:
    name: ${{parameters.pool}}
    demands: ${{parameters.demands}}

我尝试了许多不同的组合,例如将- template: 'shared_pipeline.yml' parameters: pool: 'poolname' demands: >- FPGA -equals True CI -equals True >-交换

|-更改为

demands: ${{parameters.demands}}

由于满足多种需求的原始语法是:

demands: |
  - ${{parameters.demands}}

但是一直以来,我要么得到一个错误,说语法是错误的:

demands: |
  - FPGA -equals True
  - CI -equals True

或:

job_templates/shared_pipeline.yml (Line: 10, Col: 14): Invalid demand 'FPGA -equals True CI -equals True'. The demand should be in the format '<NAME>' to test existence, and '<NAME> -equals <VALUE>' to test for a specific value. For example, 'VISUALSTUDIO' or 'agent.os -equals Windows_NT'

我已经三重检查了是否有 和具有这些功能的代理。

在我看来,参数没有得到扩展。正确,就像它们仍然是一行而不是一行一样。

我尝试查看Azure DevOps文档,但是没有这种用法的示例。我已经尝试使用Google搜索,但是找不到解决方法

2 个答案:

答案 0 :(得分:1)

所以我实际上放弃了这一点,但是今天我遇到了if的相同问题

有一个 解决方案。而不是像这样调用模板:

dependsOn

您这样称呼它:

- template: 'shared_pipeline.yml'
  parameters:
    pool: 'poolname'
    demands: >-
      FPGA -equals True
      CI -equals True

Azure Pipelines文档中没有任何记录。

还应将模板更新为:

- template: 'shared_pipeline.yml'
  parameters:
    pool: 'poolname'
    demands: ['FPGA -equals True', 'CI -equals True']

处理未将parameters: pool: '' demands: [] jobs: - job: 'Job1' pool: name: ${{parameters.pool}} demands: ${{parameters.demands}} 作为输入参数的情况。 demands可以为空,但应为空数组而不是空字符串。 demands

也是如此

答案 1 :(得分:0)

参数可以表示简单的单行字符串,我认为使它表示两行字符串不容易(或可能吗?)。

此外,很难证明您的参数可以扩展为正确的Yaml格式。如果您的第二个需求与第一个需求没有相同的缩进,则yaml管道将无法运行。相反,我建议像这样重新配置您的结构:

#shared_pipeline.yml
parameters:
  pool: ''
  demand1: ''
  demand2: ''

jobs:
- job: 'Job1'
  pool:
    name: ${{parameters.pool}}
    demands:
    - ${{parameters.demand1}}
    - ${{parameters.demand2}}
  steps:
    - script: echo Hello, world!
      displayName: 'Test'

并且:

#azure-pipelines.yml
jobs:
- template: 'shared_pipeline.yml'
  parameters:
    pool: 'default'
    demand1: 'FPGA -equals True'
    demand2: 'CI -equals True'

如果您可以确认已设置功能,那么它将很好地满足您的大多数需求:

enter image description here