Azure YAML流水线中如何定义并使用字典类型变量?
解决Azure DevOps YAML流水线定义字典变量的报错问题
报错原因
Azure DevOps的YAML变量系统中,value字段不支持直接嵌套的键值对映射(字典结构),直接在value下写aaa: aaa.zip这类嵌套内容会触发"A mapping was not expected"错误。
实现方法
你可以将字典序列化为JSON字符串来定义这个变量,具体写法如下:
variables: - template: ../../ci-cd/ado_variables/vars.yml - template: ../../ci-cd/ado_variables/${{ parameters.vnet }}_vars.yml - name: files value: '{"aaa": "aaa.zip", "bbb": "bbbb.zip"}'
流水线中访问变量的方式
根据使用的脚本环境,解析JSON字符串即可获取字典中的值:
PowerShell脚本中访问
# 将JSON字符串转为PowerShell对象 $files = ConvertFrom-Json '$(files)' # 访问具体字段 Write-Host "aaa对应的文件:$($files.aaa)" Write-Host "bbb对应的文件:$($files.bbb)"
Bash脚本中访问(需提前安装jq工具)
# 解析JSON字符串 files=$(echo '$(files)' | jq .) # 提取具体字段值 aaa_file=$(echo $files | jq -r '.aaa') bbb_file=$(echo $files | jq -r '.bbb') echo "aaa对应的文件:$aaa_file" echo "bbb对应的文件:$bbb_file"
YAML任务中直接引用(结合表达式)
如果是在YAML任务的参数中需要使用,也可以用ADO的表达式解析JSON:
- task: SomeTask@1 inputs: filePath: ${{ fromJson(variables.files).aaa }}
内容的提问来源于stack exchange,提问作者Alberto B
相关产品推荐
相关产品推荐

