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

Azure App Service部署后健康检查、自动回退及通知方案咨询

Azure App Service 自动化健康验证与回退方案

针对你的需求,Azure App Service提供了原生的部署槽位、健康检查、REST API等特性,完全可以替代休眠等待的方式,实现低成本的自动化验证、回退与通知。以下是具体实现步骤和代码示例:

1. 配置应用健康检查端点

首先需要在你的应用中实现一个健康检查端点(比如/health),该端点需返回HTTP 200 OK表示应用功能正常(可在接口中加入核心功能验证逻辑,比如数据库连接、关键服务调用)。

然后在Azure门户配置App Service健康检查:

  • 进入你的App Service资源,找到左侧菜单的健康检查
  • 启用健康检查,填写你的健康端点路径(如/health)
  • 设置失败阈值(比如连续3次失败标记为不健康),Azure会自动监控该端点状态

2. 利用部署槽位实现安全部署与自动校验

使用部署槽位(Deployment Slots)是实现安全部署的核心:

  • 创建一个staging槽,新版本先部署到该槽
  • Azure会自动启动staging槽的应用,并根据你配置的健康检查验证状态
  • 使用**交换预览(Swap Preview)**功能交换staging到production:交换前Azure会自动检查staging槽的健康状态,若不健康则终止交换,避免影响生产环境
  • 如果交换后发现生产环境异常,可通过API将production与staging再次交换,实现回退

3. 自动化流程实现(GitHub Actions示例)

以下是GitHub Actions的完整工作流,无需休眠等待,直接轮询健康状态或依赖Azure原生校验:

name: Deploy & Validate App Service
on: [push]

jobs:
  deploy-validate-rollback:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      # 登录Azure
      - name: Azure Authentication
        uses: azure/login@v2
        with:
          creds: ${{ secrets.AZURE_CREDENTIALS }}

      # 部署新版本到staging槽
      - name: Deploy to Staging Slot
        uses: azure/webapps-deploy@v3
        with:
          app-name: "your-app-name"
          slot-name: "staging"
          package: "."

      # 轮询检查staging槽健康状态(替代休眠)
      - name: Verify Staging Slot Health
        run: |
          MAX_WAIT=300  # 最大等待5分钟
          INTERVAL=10   # 每10秒检查一次
          ELAPSED=0
          HEALTH_ENDPOINT="https://your-app-name-staging.azurewebsites.net/health"

          while [ $ELAPSED -lt $MAX_WAIT ]; do
            HTTP_STATUS=$(curl -s -o /dev/null -w "%{http_code}" $HEALTH_ENDPOINT)
            if [ $HTTP_STATUS -eq 200 ]; then
              echo "✅ Staging slot is healthy, proceeding to swap"
              exit 0
            fi
            echo "⏳ Waiting for staging health... Elapsed $ELAPSED seconds"
            sleep $INTERVAL
            ELAPSED=$((ELAPSED + INTERVAL))
          done
          echo "❌ Timeout: Staging slot failed to become healthy"
          exit 1

      # 交换staging到production(自动校验健康)
      - name: Swap to Production
        run: |
          az webapp deployment slot swap \
            --name "your-app-name" \
            --slot "staging" \
            --target-slot "production" \
            --preview  # 预览交换会自动校验健康,不健康则终止

      # 验证生产环境健康,失败则回退并通知
      - name: Validate Production Health
        run: |
          HEALTH_ENDPOINT="https://your-app-name.azurewebsites.net/health"
          HTTP_STATUS=$(curl -s -o /dev/null -w "%{http_code}" $HEALTH_ENDPOINT)

          if [ $HTTP_STATUS -ne 200 ]; then
            echo "❌ Production health check failed, rolling back deployment"
            # 回退交换
            az webapp deployment slot swap \
              --name "your-app-name" \
              --slot "staging" \
              --target-slot "production"
            # 发送MS Teams通知
            curl -H "Content-Type: application/json" \
              -d '{"text": "⚠️ App Service Deployment Rollback: Production health check failed!"}' \
              ${{ secrets.TEAMS_WEBHOOK_URL }}
            exit 1
          fi
          echo "✅ Production deployment validated successfully"

4. 直接使用Azure REST API回退(可选)

如果需要脱离GitHub Actions,直接用API实现回退,可参考以下curl命令:

# 获取Azure访问令牌
AZURE_TOKEN=$(az account get-access-token --resource https://management.azure.com --query accessToken --output tsv)

# 执行回退交换(将production与staging槽交换)
curl -X POST \
  "https://management.azure.com/subscriptions/YOUR_SUBSCRIPTION_ID/resourceGroups/YOUR_RG_NAME/providers/Microsoft.Web/sites/YOUR_APP_NAME/slots/staging/swap?api-version=2023-01-01" \
  -H "Authorization: Bearer $AZURE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "targetSlot": "production",
    "preserveVnet": true
  }'

关键提示

  • 健康检查端点必须包含核心功能验证,不能仅返回200,否则无法确保新版本功能正常
  • 部署槽位的交换预览功能会自动依赖App Service的健康检查配置,无需额外编写校验逻辑
  • 通知部分可替换为Azure Logic Apps,实现更复杂的邮件/Teams通知逻辑(比如附带日志截图)

内容的提问来源于stack exchange,提问作者Nagaraj S Kharvi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 01:15:28