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

如何在Azure DevOps CI/CD Pipeline中运行VM.ps1生成VM报告?

从零实现Azure DevOps Pipeline运行VM.ps1脚本并输出公共报告

一、前置准备

  • 将VM.ps1上传至Azure DevOps项目关联的Git仓库
  • 在Azure Portal创建服务主体:给该主体分配目标Azure订阅的虚拟机读取者或贡献者权限,记录其Client ID、Client Secret、目标订阅的Subscription ID和Tenant ID

二、配置Azure DevOps服务连接

  1. 进入Azure DevOps项目的项目设置 > 服务连接 > 新建服务连接
  2. 选择Azure Resource Manager类型,再选服务主体(手动)
  3. 填入之前记录的Subscription ID、Tenant ID、Client ID、Client Secret,给服务连接命名(比如Azure-VM-Report),勾选允许所有管道使用此连接后保存

三、创建YAML Pipeline

  1. 进入Azure DevOps的管道 > 新建管道,选择脚本所在的Git仓库
  2. 替换默认的Starter Pipeline内容为以下YAML:
trigger: none # 如需定时执行,可替换为schedule字段(比如每周一执行)

pool:
  vmImage: 'windows-latest' # 适配PowerShell脚本运行环境

steps:
  # 运行VM.ps1脚本,传入参数并生成CSV报告
  - task: AzurePowerShell@5
    inputs:
      azureSubscription: 'Azure-VM-Report' # 对应创建的服务连接名称
      ScriptType: 'FilePath'
      ScriptPath: '$(System.DefaultWorkingDirectory)/VM.ps1' # 脚本在仓库中的路径,根目录则写./VM.ps1
      ScriptArguments: '-SubscriptionId "$(SubscriptionId)" -TenantId "$(TenantId)" -OutputPath "$(Build.ArtifactStagingDirectory)/VMReport.csv"'
      azurePowerShellVersion: 'LatestVersion'

  # 发布报告为Pipeline工件(可选,用于Pipeline内查看)
  - task: PublishPipelineArtifact@1
    inputs:
      targetPath: '$(Build.ArtifactStagingDirectory)/VMReport.csv'
      artifact: 'VM-Report'
      publishLocation: 'Container'

  # 上传报告至Azure公共存储容器(实现全员可访问)
  - task: AzureFileCopy@4
    inputs:
      SourcePath: '$(Build.ArtifactStagingDirectory)/VMReport.csv'
      azureSubscription: 'Azure-VM-Report'
      Destination: 'AzureBlob'
      storage: '<你的存储账户名称>'
      ContainerName: '<公共容器名称>'
      BlobPrefix: 'vm-reports' # 可选,用于分类存储报告
  1. 配置管道变量:进入管道编辑页面,点击变量,添加SubscriptionId和TenantId两个变量,填入对应的值(如需保密可勾选变量的保密选项)

四、配置公共访问的存储容器

  1. 在Azure Portal创建存储账户,创建新容器并设置公共访问级别为容器(匿名读取容器和 blob)
  2. 替换YAML中<你的存储账户名称>和<公共容器名称>为实际值,全员即可通过https://<存储账户名>.blob.core.windows.net/<容器名>/vm-reports/VMReport.csv访问报告

五、常见问题排查

  • 权限报错:检查服务主体是否有目标订阅的虚拟机读取权限,可在Azure Portal的订阅**访问控制(IAM)**中确认角色分配
  • 脚本路径错误:确认仓库中脚本的实际路径与YAML里的ScriptPath一致
  • 参数不生效:检查脚本是否定义了对应参数(如param([string]$SubscriptionId, [string]$TenantId, [string]$OutputPath)),管道变量名是否与脚本参数匹配
  • PowerShell版本差异:本地与Pipeline代理的PowerShell版本不一致时,可在YAML中指定具体版本(如azurePowerShellVersion: '7.x')

内容的提问来源于stack exchange,提问作者Dheeman Das

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 21:30:33