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

如何通过Azure DevOps Pipeline使用发布配置文件部署Blazor网站?

基于Web Publish Profile创建Azure DevOps YAML流水线部署Blazor网站

核心思路

不用纠结内置MSDeploy任务的参数缺失问题,直接复用现有发布配置文件,通过dotnet publish或直接调用msdeploy.exe即可完整复刻原Visual Studio部署的所有行为。

方案一:复用Publish Profile文件部署

步骤1:提交发布配置文件到仓库

将你的.pubxml发布配置文件(比如命名为Production.pubxml)放到项目的Properties/PublishProfiles目录下,提交到Git仓库(注意:不要把明文密码存到仓库,后续用Azure DevOps秘密变量替代)。

步骤2:YAML流水线完整配置

trigger:
  branches:
    include:
      - main # 替换为你的目标分支

pool:
  vmImage: 'windows-latest' # 必须用Windows镜像,MSDeploy依赖Windows环境

variables:
  buildConfiguration: 'Release'
  publishProfileName: 'Production.pubxml' # 替换为你的发布配置文件名
  deployPassword: $(IIS_Deploy_Password) # 在Azure DevOps变量库中配置此秘密变量

steps:
  - task: UseDotNet@2
    displayName: 安装.NET 7 SDK
    inputs:
      packageType: 'sdk'
      version: '7.x' # 若使用.NET 8则改为'8.x'

  - task: DotNetCoreCLI@2
    displayName: 构建项目
    inputs:
      command: 'build'
      projects: '**/*.csproj'
      arguments: '--configuration $(buildConfiguration)'

  - task: DotNetCoreCLI@2
    displayName: 发布并部署到服务器
    inputs:
      command: 'publish'
      projects: '**/*.csproj'
      arguments: >
        --configuration $(buildConfiguration)
        /p:PublishProfile=$(publishProfileName)
        /p:Password=$(deployPassword)
        /p:AllowUntrustedCertificate=true # 服务器用自签证书时添加此参数
      publishWebProjects: false
      zipAfterPublish: false

关键说明

  • 秘密变量配置:在Azure DevOps流水线的「变量」面板中添加IIS_Deploy_Password,勾选「保密」选项,填入你的部署密码。
  • 参数覆盖:/p:Password=$(deployPassword)会替换发布配置文件中的密码,避免仓库存明文敏感信息。
  • 自签证书处理:如果服务器使用自签SSL证书,必须添加/p:AllowUntrustedCertificate=true,否则会出现证书信任错误。

方案二:直接调用MSDeploy.exe(更灵活)

如果需要更精细控制部署环节,可直接调用msdeploy.exe命令,完全匹配原配置的所有参数:

trigger:
  - main

pool:
  vmImage: 'windows-latest'

variables:
  buildConfiguration: 'Release'
  msdeployServiceUrl: 'https://example.com:8172/msdeploy.axd?site=example.com'
  deployIisPath: 'example.com'
  deployUsername: 'forumpur'
  deployPassword: $(IIS_Deploy_Password)

steps:
  - task: UseDotNet@2
    displayName: 安装.NET 7 SDK
    inputs:
      packageType: 'sdk'
      version: '7.x'

  - task: DotNetCoreCLI@2
    displayName: 发布项目到本地目录
    inputs:
      command: 'publish'
      projects: '**/*.csproj'
      arguments: '--configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)/publish'
      publishWebProjects: false

  - task: CmdLine@2
    displayName: 执行MSDeploy同步部署
    inputs:
      script: |
        "C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" ^
        -verb:sync ^
        -source:iisApp="$(Build.ArtifactStagingDirectory)/publish" ^
        -dest:iisApp="$(deployIisPath)",computerName="$(msdeployServiceUrl)",userName="$(deployUsername)",password="$(deployPassword)",authtype="Basic" ^
        -enableRule:DoNotDeleteRule ^ # 对应原配置SkipExtraFilesOnServer=true
        -enableRule:AppOffline ^ # 对应原配置EnableMsDeployAppOffline=true
        -enableBackup ^ # 对应原配置EnableMSDeployBackup=true
        -allowUntrusted # 自签证书环境添加此参数

调试与验证

  • 查看流水线日志:部署失败时重点关注MSDeploy命令的输出,通常会明确提示错误原因(如密码错误、权限不足、证书问题)。
  • 离线模式验证:部署期间检查服务器站点根目录是否生成app_offline.htm,确保用户访问时不会看到部署中的异常页面。
  • 增量部署验证:部署完成后检查服务器上未修改的文件是否保留(对应SkipExtraFilesOnServer=true的效果)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 09:20:58