如何在Pipeline模板中遍历YAML复杂对象并访问嵌套属性
Azure Pipeline 遍历密钥库参数获取属性值问题
我有如下结构的Pipeline参数对象:
keyVaults: test-az-kv-01: - filter: clientID - second: test test-az-kv-02: - filter: clientID2 - second: wonderful我需要在Pipeline模板中遍历这个参数执行步骤,当前的遍历代码如下:
- ${{ each kv in parameters.keyVaults }}: - script: echo '${{ kv.key }} - ${{ kv.filter }}' displayName: Test outer目前
kv.key可以正常获取到密钥库名称,但无法访问每个密钥库对应的filter和second值,请问该如何实现?
问题原因
你的参数结构中,每个密钥库对应的是对象数组(比如test-az-kv-01对应包含两个对象的数组),而非单个对象。kv代表遍历到的键值对,其中kv.key是密钥库名称,kv.value才是这个数组,所以直接写kv.filter无法正确访问属性。
解决方法
方法1:调整参数结构(推荐)
把每个密钥库的属性从数组改为单个对象,访问逻辑更直观且不易出错:
keyVaults: test-az-kv-01: filter: clientID second: test test-az-kv-02: filter: clientID2 second: wonderful
对应的遍历代码修改为:
- ${{ each kv in parameters.keyVaults }}: - script: echo '${{ kv.key }} - filter: ${{ kv.value.filter }}, second: ${{ kv.value.second }}' displayName: Process ${{ kv.key }}
方法2:不调整参数结构,直接访问数组元素
如果无法修改原参数结构,可以通过数组索引访问对应属性(注意依赖数组元素的顺序):
- ${{ each kv in parameters.keyVaults }}: - script: echo '${{ kv.key }} - filter: ${{ kv.value[0].filter }}, second: ${{ kv.value[1].second }}' displayName: Process ${{ kv.key }}
若属性数量不固定,也可以遍历数组内的每个属性项:
- ${{ each kv in parameters.keyVaults }}: - script: echo 'Processing key vault: ${{ kv.key }}' displayName: Start processing ${{ kv.key }} - ${{ each prop in kv.value }}: - script: echo '${{ prop.filter || prop.second }}' displayName: Output property for ${{ kv.key }}
内容的提问来源于stack exchange,提问作者Nerd in Training
相关产品推荐
相关产品推荐

