Azure DevOps管道中能否以名称为索引从参数数组获取对象?
报错核心原因
- 类型不匹配错误
你提到RepositoryList是数组类型参数,数组仅支持数字下标索引,你直接用仓库名字符串作为索引取值,自然会抛出A mapping was not expected异常,该异常就是提示你当前操作的类型不支持字符串键映射。
如果你需要通过仓库名作为键取值,需要将RepositoryList的参数类型修改为object(键值对映射类型),参数定义示例如下:
parameters: - name: RepositoryList type: object default: 你的仓库名1: 配置项1: xxx 配置项2: xxx 你的仓库名2: 配置项1: yyy 配置项2: yyy
- 表达式语法存在笔误
你给出的变量定义表达式少了一个闭合的右方括号,修正后的语法格式为:
variables: SelectedRepository: ${{ parameters.RepositoryList[variables['Build.Repository.Name']] }}
关于参数和变量的处理顺序说明
参数确实是在编译阶段最早完成解析的资源,早于模板变量的解析。Build.Repository.Name属于触发流水线时就确定的源信息变量,在编译阶段也已经有固定值,只要你把RepositoryList改为object类型,修正语法后上述配置是可以正常运行的。
替代方案
如果你的RepositoryList必须保留数组类型,可以通过遍历数组匹配仓库名的方式给变量赋值,示例如下:
variables: ${{ each repo in parameters.RepositoryList }}: ${{ if eq(repo.name, variables['Build.Repository.Name']) }}: SelectedRepository: ${{ repo }}
(注:上述配置需要数组内的每个对象包含name字段存储仓库名,可根据你的实际字段名调整)
内容的提问来源于stack exchange,提问作者Boanerge
相关产品推荐
相关产品推荐

