ADO YAML 管道 - 将对象参数传递给模板

问题描述 投票:0回答:1

我有一个调用模板的 yaml 管道:

parameters:
  - name: Food1
    type: string
  - name: Food2
    type: string
  - name: Food3
    type: string

jobs:
  - template: .\testLoop.yml
    parameters: 
      foodObject: |
        Food1: ${{ parameters.Food1 }}
        Food2: ${{ parameters.Food2 }}
        Food3: ${{ parameters.Food3 }}

模板的输入参数为“object”类型:

parameters:
  - name: foodObject
    type: object
    default:
    - Food1: 'Apple'
    - Food2: 'Bread'
    - Food3: 'Cheese'
jobs:
  - job: test_loop
    displayName: 'Test Loop'
    pool: 
      vmImage: windows-latest
    steps:
      - ${{ each food in parameters.foodObject }} :
        - powershell: |
            Write-Host "Food name is '${{ food.key }}' and value is '${{ food.value }}'"

但是我收到错误:

如果管道有一个对象参数并且我将其发送到模板,则它可以工作。

似乎通过自己从字符串参数“构建”对象,它实际上从未成为“映射”(???),即使存在用“:”分隔的键值对。

我尝试过使用“或'或多行或多空格之类的不同格式,但无法使其工作。

错误似乎不是指输入参数,而是指第 9 行的“each”循环。

有什么想法可以解决这个问题吗?

loops azure-devops yaml azure-pipelines-yaml
1个回答
0
投票

使用您的 YAML 示例时我可以重现相同的问题。

问题的原因可能是传递给模板时对象参数的格式有问题。

要解决此问题,您可以使用以下示例:

主要 YAML:

parameters:
  - name: Food1
    type: string
  - name: Food2
    type: string
  - name: Food3
    type: string

jobs:
  - template: .\testLoop.yml
    parameters: 
      foodObject: 
      - name: food1
        value: ${{ parameters.Food1 }}
      - name: food2
        value: ${{ parameters.Food2 }}
      - name: food3
        value: ${{ parameters.Food3 }}

模板 YAML:

parameters:
  - name: foodObject
    type: object
    default:
    - name: food1
      value: apple
    - name: food2
      value: Bread
    - name: food3
      value: Cheese
jobs:
  - job: test_loop
    displayName: 'Test Loop'
    pool: 
      vmImage: windows-latest
    steps:
      - ${{ each food in parameters.foodObject }} :
        - powershell: |
            Write-Host "Food name is '${{ food.name }}' and value is '${{ food.value }}'"

结果:

© www.soinside.com 2019 - 2024. All rights reserved.