You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 07:01:07