我有一个调用模板的 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”循环。
有什么想法可以解决这个问题吗?
使用您的 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 }}'"
结果: