Azure DevOps YAML传递数组参数报错:未找到'repos'键
问题分析与修复
报错Key not found 'repos'的核心原因有两个:
- 模板文件
template.yml未定义repos参数,导致调用时传入的参数无法被识别 batch.yml中传递参数的格式不符合Azure DevOps Pipeline的语法规范
1. 修复template.yml:添加repos参数
在template.yml的parameters部分新增repos参数,类型指定为字符串数组:
parameters: - name: branchName type: string default: '' - name: repos type: string[] # 定义为字符串数组类型 default: [] # 设置默认空数组 steps: - ${{ each repo in parameters.repos }}: - task: TriggerPipeline@1 displayName: 'Trigger Azure DevOps Pipeline: Build' inputs: serviceConnection: 'Azure_DevOps_API_Connection' project: ABC Pipeline: 'Build' buildDefinition: '${{ repo }}-build-k8s' buildRepo: '${{ repo }}' Branch: '${{ parameters.branchName }}' - task: Bash@3 inputs: targetType: 'inline' script: 'sleep 120'
2. 修正batch.yml:参数传递格式
Azure DevOps Pipeline调用模板时,参数传递不需要用- name:的列表形式,直接以键值对赋值即可,同时注意缩进规范:
# batch.yml trigger: - d94-Develop pool: vmImage: 'windows-latest' ## ESSA Prod Websites ## steps: - template: template.yml parameters: branchName: $(Build.SourceBranchName) # 直接赋值字符串 repos: # 赋值数组 - 'app-essa-abc-fr' - 'app-essa-abc-tr'
关键说明
- 模板必须先定义参数才能接收传入的值,否则会触发"Key not found"错误
- 调用模板时的parameters块是键值对结构,不是参数定义的列表结构,这是Azure DevOps Pipeline的语法要求
- 数组类型参数传递时,保持缩进层级一致即可正确识别
内容的提问来源于stack exchange,提问作者Devops-Learner
相关产品推荐
相关产品推荐

