如何在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服务连接
- 进入Azure DevOps项目的项目设置 > 服务连接 > 新建服务连接
- 选择
Azure Resource Manager类型,再选服务主体(手动) - 填入之前记录的
Subscription ID、Tenant ID、Client ID、Client Secret,给服务连接命名(比如Azure-VM-Report),勾选允许所有管道使用此连接后保存
三、创建YAML Pipeline
- 进入Azure DevOps的管道 > 新建管道,选择脚本所在的Git仓库
- 替换默认的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' # 可选,用于分类存储报告
- 配置管道变量:进入管道编辑页面,点击变量,添加
SubscriptionId和TenantId两个变量,填入对应的值(如需保密可勾选变量的保密选项)
四、配置公共访问的存储容器
- 在Azure Portal创建存储账户,创建新容器并设置公共访问级别为容器(匿名读取容器和 blob)
- 替换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
相关产品推荐
相关产品推荐

