首页 > 解决方案 > 当作为复杂对象类型参数的一部分传递并与另一个对象合并时,无法识别 Devops yaml 字符串数组

问题描述

可以循环并打印作为参数传递给 Azure Devops Yaml 管道模板的数组中的字符串。您还可以遍历作为复杂对象的一部分传递的字符串数组,或者与另一个数组合并 - 但不能同时使用两者。

下面我有 2 个工作示例,然后是一个崩溃的示例。

工作示例#1

天蓝色部署.yml:

extends:
  template: azure-deploy-template.yml
  parameters:
    complexObject:
    - drink: 'water'
      foods:
      - 'apple'
      - 'banana'

天蓝色部署模板.yml:

parameters:
- name: complexObject
  type: object

jobs:
- job: TestJob
  pool:
    vmImage: 'ubuntu-latest'

  steps:
  - ${{ each o in parameters.complexObject }}:
    - ${{ each f in o.foods }}:
      - script: echo '${{convertToJson(f)}}'
      - script: echo '${{f}}'

输出:

"apple"
apple
"banana"
banana

工作示例#2:

天蓝色部署.yml:

extends:
  template: azure-deploy-template.yml
  parameters:
    animals: 
    - 'cat'
    - 'dog'
    complexObject:
    - drink: 'water'
    foods:
    - 'apple'
    - 'banana'

天蓝色部署模板.yml

parameters:
- name: animals
  type: object
- name: complexObject
  type: object
- name: foods
  type: object

jobs:
- job: TestJob
  pool:
    vmImage: 'ubuntu-latest'

  steps:
  - ${{ each o in parameters.complexObject }}:
    - ${{ each f in coalesce(parameters.foods, parameters.animals) }}:
      - script: echo '${{convertToJson(f)}}'
      - script: echo '${{f}}'

输出:

与#1 相同

问题案例

天蓝色部署.yml

extends:
  template: azure-deploy-template.yml
  parameters:
    animals: 
    - 'cat'
    - 'dog'
    complexObject:
    - drink: 'water'
      foods:
      - 'apple'
      - 'banana'

天蓝色部署模板.yml

parameters:
- name: animals
  type: object
- name: complexObject
  type: object

jobs:
- job: TestJob
  pool:
    vmImage: 'ubuntu-latest'

  steps:
  - ${{ each o in parameters.complexObject }}:
    - ${{ each f in coalesce(o.foods, parameters.animals) }}:
      - script: echo '${{convertToJson(f)}}'
      - script: echo '${{f}}'

这失败并出现错误: 无法从对象转换为字符串

如果我删除最后一行azure-deploy-template.yml,则只有 json 输出。输出:

{
  "lit": "apple",
  "style": "",
  "line": "13",
  "col": "5",
  "type": "0"
}
{
  "lit": "banana",
  "style": "",
  "line": "13",
  "col": "5",
  "type": "0"
}

为什么字符串数组被解释为这个奇怪的复杂对象?

标签: azure-devopsyamldevopsazure-yaml-pipelines

解决方案


推荐阅读