如何从嵌套对象中检索值?

tru*_*tio 1 azure-devops azure-pipelines azure-pipelines-yaml

我试图从嵌套参数中获取值,如下所示:

parameters:
  - name: myObject
    type: object
    default:
      foo: FOO
      things:
        - one
      nested:
        one: apple
        count: 3
Run Code Online (Sandbox Code Playgroud)

所以我期望写这样的东西${{ parameters.myObject.foo }}${{ parameters.myObject.nested.one }}检索一个值。

还有一个循环遍历列表对象的示例,如下所示:

- name: listOfStrings
  type: object
  default:
  - one
  - two

steps:
- ${{ each value in parameters.listOfStrings }}:
  - script: echo ${{ value }}
Run Code Online (Sandbox Code Playgroud)

这就是为什么我试图以这种方式获得价值,但它对我来说也不起作用:

- name: myObject
  type: object
  default:
    foo: FOO
    nested:
      one: apple

steps:
- ${{ each value in parameters.myObject }}:
  - script: echo ${{ value.foo }}
Run Code Online (Sandbox Code Playgroud)

不幸的是,微软没有在文档中提供示例https://learn.microsoft.com/en-us/azure/devops/pipelines/process/templates?view=azure-devops

有人可以建议如何检索嵌套值吗?

小智 6

该对象包含嵌套对象和数组,您可以使用以下代码:

parameters:
- name: myObject
  type: object
  default:
    foo: FOO
    bar: BAR
    things:
    - one
    - two
    - three
    nested:
      one: apple
      two: pear
      count: 3

trigger: none

jobs: 
- job: object
  steps:
    - bash: echo ${{parameters.myObject.foo}}                     # echo object foo value
    - bash: echo ${{parameters.myObject.things[1]}}               # echo one specific string value in array.
    - bash: echo ${{parameters.myObject.nested.two}}              # echo nested object value
    - ${{ each value in parameters.myObject.things }}:            # echo every string value in array.
      - script: echo ${{ value }}
    - ${{ each pair in parameters.myObject.nested }}:             # echo every nested object key and value
      - script: echo "${{ pair.key }}, ${{ pair.value }}"
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

您必须为“each”字符串指定嵌套对象(parameters.myObject.nested),因为您无法将对象(数组)转换为字符串以进行输出。