Azure DevOps CICD部署前下线APP及app_offline.htm自动化配置问题
Azure DevOps部署Azure App Service前下线应用问题解答
1、仅勾选「Take App Offline」选项是否足以完成APP下线
官方选项说明:勾选「Take Application Offline」选项后,系统将在同步操作启动前向AzureRM Web App根目录放置app_offline.htm文件以将应用下线,同步操作成功完成后该文件会被自动移除。
绝大多数常规部署场景下,仅勾选该选项就足够完成应用下线。
这个功能的底层逻辑依赖Azure App Service默认集成的app_offline.htm规则:只要根目录下存在该文件,所有用户请求都会被拦截并返回该静态文件的内容,同时应用运行进程会被暂停,既可以避免部署过程中出现文件锁、新旧请求逻辑冲突导致的部署失败,也可以给终端用户返回统一的服务暂停提示。
特殊例外场景:如果你的App Service使用自定义容器运行时(非Azure官方托管的IIS/.NET/Node.js等标准运行栈),或是自行修改了web.config/路由规则,下调了app_offline.htm的默认响应优先级,该功能可能失效,需要额外自行实现下线逻辑。
2、如何实现app_offline.htm的自动化添加
根据你的需求可以选择两种方案:
- 无需自定义下线页内容:直接使用Azure DevOps官方的
Azure App Service deploy任务,在「附加部署选项」分类下勾选「Take App Offline」即可,系统会自动生成默认的app_offline.htm文件,在部署开始前上传到站点根目录,部署成功后自动删除,无需额外开发逻辑。 - 需要自定义下线页内容:提前编写好符合你们业务需求的app_offline.htm文件,存放在代码仓库或构建产物目录中,在正式部署任务前后分别加一步执行逻辑即可:
- 部署前执行Azure CLI命令,将自定义的app_offline.htm上传到站点根目录:
az webapp deploy --resource-group <替换为你的资源组名称> --name <替换为你的App Service名称> --src-path <替换为本地app_offline.htm的路径> --type static --target-path wwwroot/app_offline.htm - 部署成功后执行命令删除该文件,恢复应用正常访问:
az webapp ssh --resource-group <替换为你的资源组名称> --name <替换为你的App Service名称> --command "rm /home/site/wwwroot/app_offline.htm"
如果是Windows运行时的App Service,删除命令可调整为对应的Kudu API调用或PowerShell命令,路径对应修改为Windows站点的wwwroot路径即可。
- 部署前执行Azure CLI命令,将自定义的app_offline.htm上传到站点根目录:
内容的提问来源于stack exchange,提问作者user1005310
相关产品推荐
相关产品推荐

