如何在Azure DevOps中创建数组变量并实现任务循环执行
解决Azure DevOps Pipeline循环任务的数组传递问题
1. 主Pipeline中定义数组变量并传递给模板
Azure DevOps YAML里直接定义数组变量要用YAML数组格式,不能用空格分隔的字符串。同时传递参数给模板时,要使用编译时表达式${{ variables.abc }}(而非运行时的$(abc)),这样模板才能在编译阶段正确识别数组结构。
修改后主Pipeline代码:
pool: vmImage: 'windows-latest' parameters: - name: environment displayName: 'Select Environment To Deploy' type: string values: - A1 - A2 default: A1 variables: - name: abc value: ['firm20', 'firm201'] # 用YAML数组格式声明变量 stages: - stage: stage01 displayName: 'Deploy in Environment ' jobs: - template: templates/test_task_for.yml parameters: list: ${{ variables.abc }} # 用编译时表达式传递数组参数
2. 模板Pipeline的参数设置与循环逻辑
模板里的参数类型要设为object(YAML数组属于object类型范畴),默认值设为[]是正确的。循环时要遍历模板接收的parameters.list,而非主Pipeline的变量。
修改后模板代码:
parameters: - name: list type: object # 数组对应object类型 default: [] # 默认空数组,设置正确 jobs: - job: connectxyz displayName: 'Connect' steps: - ${{each mc in parameters.list}}: # 遍历模板接收的数组参数 - task: CmdLine@2 inputs: script: 'echo Write your commands here. ${{mc}}'
关键说明
- 编译时表达式
${{ ... }}用于模板渲染阶段,能完整传递数组结构;运行时变量$(...)仅在Pipeline运行时解析,无法传递数组给模板。 - 模板参数用
object类型可接收数组、字典等复杂结构,完全适配数组循环需求。
内容的提问来源于stack exchange,提问作者ABC DEF
相关产品推荐
相关产品推荐

