Azure DevOps 流水线实战:.NET 应用构建与 Azure VM 部署自动化

1. 核心流程概述
  • 构建阶段:代码编译 → 单元测试 → 生成部署包
  • 部署阶段:连接 Azure VM → 传输部署包 → 应用配置 → 服务启动
  • 完整流程:
    代码提交 → 自动触发流水线 → 构建 .NET 应用 → 发布到 Azure VM
    

2. 构建流水线配置(YAML 示例)
trigger:
- main  # 监听 main 分支提交

pool:
  vmImage: 'windows-latest'  # 使用 Windows 代理

variables:
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'

steps:
- task: NuGetToolInstaller@1  # NuGet 工具安装

- task: NuGetCommand@2
  inputs:
    restoreSolution: '$(solution)'

- task: VSBuild@1  # 编译 .NET 应用
  inputs:
    solution: '$(solution)'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

- task: VSTest@2  # 执行单元测试
  inputs:
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

- task: PublishBuildArtifacts@1  # 发布部署包
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'drop'

3. Azure VM 部署关键步骤
(1) 创建部署组
  1. Azure DevOps → 部署组 → 新建组(如 Production-VMs
  2. 在目标 Azure VM 执行注册脚本:
    .\config.cmd --deploymentgroup --agent $env:COMPUTERNAME --runasservice --deploymentgroupname "Production-VMs" --acceptteeeula
    

(2) 发布流水线配置
stages:
- stage: Deploy
  jobs:
  - deployment: VMDeployment
    environment: 
      name: Production-VMs
      resourceType: VirtualMachine
    strategy:
      runOnce:
        deploy:
          steps:
          - download: current  # 获取构建产物
            artifact: drop
            
          - task: IISWebAppDeploymentOnMachineGroup@0  # IIS 部署
            inputs:
              WebSiteName: 'MyApp'
              Package: '$(Pipeline.Workspace)/drop/**/*.zip'
              
          - script: net start MyAppService  # 启动服务
            displayName: '启动应用程序服务'

4. 关键配置项说明
组件 作用 注意事项
部署组 管理目标 VM 集群 需在每台 VM 安装代理
IIS 部署任务 自动配置 IIS 站点 需提前在 VM 安装 IIS 角色
环境变量 传递配置参数 建议使用 $(variable) 语法管理敏感值
5. 常见问题排查
  • 部署失败
    1. 检查 VM 代理状态:Get-Service vstsagent*
    2. 验证网络策略:确保 VM 允许 Azure DevOps 出口 IP
  • 构建中断
    # 清理 NuGet 缓存
    dotnet nuget locals all --clear
    

  • 权限问题
    • 在 Azure 服务连接中配置 Contributor 角色
    • VM 本地策略授予 IIS_IUSRS 写权限

提示:使用 多阶段 YAML 可统一管理构建/部署流程,完整示例见 Azure DevOps 文档

更多推荐