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

Azure DevOps流水线部署Asp.net Core MVC应用遇Service Unavailable错误

解决部署槽Service Unavailable的排查步骤

1. 启用部署槽预热机制

  • 登录Azure门户,进入目标App Service的「部署槽」页面,选中你的部署槽后打开「配置」->「常规设置」
  • 勾选「预热实例」选项,让Azure在部署完成后等待应用完成初始化再对外提供服务,避免未就绪实例返回503错误
  • 若用流水线/ARM模板配置,可在App Service的siteConfig中添加alwaysOn: true和preWarmedInstanceCount: 1(根据实例数量调整参数值)

2. 优化流水线部署后的等待逻辑

  • 若使用Azure Web App Deploy任务,在「高级」设置里勾选「部署后等待站点启动」选项,让流水线等待应用启动完成再结束
  • 或在部署步骤后添加PowerShell/Azure CLI步骤,循环检查槽实例状态和应用健康端点:
# 等待槽实例进入运行状态
while true; do
  STATE=$(az webapp show --name <你的应用名> --resource-group <资源组名> --slot <部署槽名> --query state -o tsv)
  if [ "$STATE" = "Running" ]; then
    break
  fi
  sleep 10
done

# 检查应用健康端点(需提前在项目中配置/health这类健康检查接口)
while true; do
  RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" https://<你的部署槽域名>/health)
  if [ "$RESPONSE" = "200" ]; then
    break
  fi
  sleep 10
done

3. 修正启停步骤的目标与时机

  • 确保启停操作针对部署槽而非生产槽,Azure CLI命令需添加--slot <部署槽名>参数
  • 将启停步骤放在部署完成后,且启动后预留足够初始化时间:
# 停止部署槽
az webapp stop --name <你的应用名> --resource-group <资源组名> --slot <部署槽名>
# 启动部署槽
az webapp start --name <你的应用名> --resource-group <资源组名> --slot <部署槽名>
# 等待应用初始化
sleep 60

4. 排查ASP.NET Core应用启动问题

  • 启用App Service的「Always On」选项(配置->常规设置),防止实例被Azure自动休眠
  • 查看Azure门户的「日志流」,检查部署后的启动报错(比如依赖缺失、数据库连接失败等),这类问题会导致启动失败,手动重启才会触发重新初始化
  • 在Program.cs中添加启动日志,便于定位初始化阶段问题:
var builder = WebApplication.CreateBuilder(args);
builder.Logging.AddAzureWebAppDiagnostics();
// 其他配置代码...
var app = builder.Build();

app.Logger.LogInformation("应用启动完成,开始监听请求");

5. 检查部署槽交换设置(若涉及生产槽交换)

  • 若部署后需交换到生产槽,确保交换时启用「交换前预热」选项,让Azure先预热目标槽实例,避免交换后生产槽出现503
  • 在流水线的Swap Slots任务中,勾选「Pre-warm swap target slot instances」选项

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 23:15:05