Azure DevOps中如何通过YAML循环多环境执行PowerShell脚本
在Azure DevOps YAML中实现多环境循环执行PowerShell脚本
方法1:使用作业矩阵(推荐)
Azure DevOps YAML的作业矩阵是原生支持多环境批量执行的方案,能自动为每个环境生成独立作业,支持并行/串行执行,清晰对应每个环境的订阅和变量组。
完整YAML示例
trigger: - main jobs: - job: RunScriptPerEnvironment displayName: 按环境执行PowerShell脚本 strategy: matrix: DEV: envName: DEV azureSubscription: ABC-nonprod-dev variableGroup: DEV-Variable-Group UAT: envName: UAT azureSubscription: ABC-nonprod-uat variableGroup: UAT-Variable-Group PROD: envName: PROD azureSubscription: ABC-prod variableGroup: PROD-Variable-Group # 可选:设为false并行执行,设为true串行执行(PROD建议放在最后串行) maxParallel: 2 variables: # 动态关联当前环境的变量组 - group: $(variableGroup) steps: - task: AzurePowerShell@5 displayName: 登录Azure订阅并执行脚本 inputs: azureSubscription: $(azureSubscription) ScriptType: FilePath ScriptPath: src/databricks/ABC.ps1 # 传递环境名称给脚本做差异化逻辑 ScriptArguments: -EnvironmentName $(envName) azurePowerShellVersion: LatestVersion
关键说明
- 矩阵定义:
matrix块直接枚举每个环境的专属配置,每个条目自动生成独立作业。 - 变量组绑定:通过
$(variableGroup)动态关联对应环境的变量组,确保配置隔离。 - 执行控制:
maxParallel控制并行数量,若需PROD在DEV/UAT完成后执行,可拆分作业并添加dependsOn依赖。
方法2:使用参数循环(适用于动态环境列表)
如果需要更灵活的环境配置(比如后续要新增环境),可以用参数+循环的方式动态生成作业:
YAML示例
trigger: - main parameters: - name: environments type: object default: - name: DEV subscription: ABC-nonprod-dev variableGroup: DEV-Variable-Group - name: UAT subscription: ABC-nonprod-uat variableGroup: UAT-Variable-Group - name: PROD subscription: ABC-prod variableGroup: PROD-Variable-Group jobs: - ${{ each env in parameters.environments }}: - job: RunScript_${{ env.name }} displayName: 执行脚本 - ${{ env.name }} variables: - group: ${{ env.variableGroup }} steps: - task: AzurePowerShell@5 displayName: 登录${{ env.name }}订阅并执行脚本 inputs: azureSubscription: ${{ env.subscription }} ScriptType: FilePath ScriptPath: src/databricks/ABC.ps1 ScriptArguments: -EnvironmentName ${{ env.name }} azurePowerShellVersion: LatestVersion # 可选:让PROD依赖DEV/UAT执行完成 ${{ if eq(env.name, 'PROD') }}: dependsOn: - RunScript_DEV - RunScript_UAT
关键说明
- 参数化环境:把环境列表定义为参数,后续修改或手动触发流水线时可直接调整。
- 循环生成作业:通过
${{ each }}遍历参数中的环境列表,自动生成对应作业。 - 依赖控制:针对PROD环境添加
dependsOn,确保生产环境操作在前置环境验证完成后执行。
脚本适配建议
在ABC.ps1中可接收环境参数,实现差异化逻辑:
param( [Parameter(Mandatory=$true)] [string]$EnvironmentName ) Write-Host "当前执行环境: $EnvironmentName" # 根据环境执行不同操作 switch ($EnvironmentName) { "DEV" { # DEV环境专属逻辑 } "UAT" { # UAT环境专属逻辑 } "PROD" { # PROD环境专属逻辑 } }
内容的提问来源于stack exchange,提问作者RubenSo
相关产品推荐
相关产品推荐

