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

如何通过Azure DevOps在App Service部署槽部署Docker-Compose应用及实现零停机?

Azure DevOps部署多容器Docker-Compose到App Service部署槽的方案

当前工作流概述

你当前的CI/CD流程如下:

  • 为每个容器配置独立构建流水线,包含步骤:
    1. 用Docker@2任务构建Docker镜像并推送到Azure Container Registry
    2. 更新变量组中的tag变量,同步镜像版本
  • 构建完成后执行发布流水线,包含步骤:
    1. 从工件库下载docker-compose.template.yml文件
    2. 将文件中的${TAG}替换为变量组更新后的tag
    3. 把更新后的docker-compose.yml部署到Azure App Service

部署槽相关问题与解决方案

Azure完全支持通过Azure DevOps将Docker-Compose应用部署到部署槽,以下是具体可行方案:

方案1:直接用Azure DevOps任务部署到槽并交换

不需要依赖部署中心的设置,直接修改发布流水线即可:

  1. 部署到staging槽:
    使用AzureWebAppContainer任务(专门针对多容器应用),配置参数:
    • 选择对应的Azure订阅和App Service名称
    • 在「部署槽」字段填入stg作为目标槽
    • 指定更新后的docker-compose.yml文件路径作为配置文件
    • 确保任务使用的服务主体拥有该槽的部署权限
  2. 执行槽交换:
    部署完成后,添加Azure App Service manage任务,选择「交换槽」操作:
    • 指定源槽为stg,目标槽为生产槽
    • 该操作无需部署中心配置Azure DevOps作为源,因为是通过DevOps任务直接部署到槽,部署中心的隔离设置不影响此流程

方案2:优化现有构建流水线(可选)

当前每个容器单独建构建流水线的方式可以简化:

  • 在单条构建流水线中,用Docker@2任务批量构建所有容器镜像并推送到ACR
  • 统一更新变量组的tag,减少流水线的维护成本
  • 发布流水线逻辑保持不变,仅修改部署目标为指定槽即可

零停机部署的替代方案

如果槽交换仍有问题,可通过以下方式实现零停机:

  • 先将新版本部署到staging槽,执行预热操作(比如用脚本访问槽的健康检查端点,确保服务就绪)
  • 预热完成后,通过DevOps任务切换流量到staging槽,验证无误后再处理旧生产槽资源(或保留作为回滚槽)
  • 本质上这和蓝绿部署模式一致,通过流量切换实现零停机更新

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 18:33:15