Azure DevOps Pipeline使用ZIP Deploy部署包失败问题求助
问题背景
首次通过Azure DevOps Pipeline部署Windows系统的Azure App Service成功,后续部署反复报ZIP Deploy失败错误,手动断开Deployment中心连接后可临时恢复,问题重复出现。
报错信息:
Failed to deploy web package to App Service. To debug further please check Kudu stack trace URL : https://$XYZ-dev:***@XYZ-dev.scm.azurewebsites.net/api/vfs/LogFiles/kudu/trace Error: Package deployment using ZIP Deploy failed. Refer logs for more details.
根因说明
Windows App Service运行过程中,应用进程会锁定站点目录下的可执行文件、日志文件、配置文件等资源,默认的ZIP Deploy流程没有提前释放这些锁,尝试覆盖被锁定文件时就会触发部署失败。手动断开Deployment中心连接的操作会触发站点重启,临时释放文件锁,所以可以临时解决问题,但没有从部署流程层面规避锁冲突。
永久解决方案
- 配置App Service全局部署参数
进入Azure门户对应App Service的「配置」-「应用程序设置」页面,添加以下3个参数,点击保存后应用会自动重启生效:MSDEPLOY_RENAME_LOCKED_FILES = 1:部署时自动重命名被锁定的文件,避免文件覆盖阻塞SCM_DISABLE_ZIP_CACHE = 1:关闭Kudu的ZIP部署缓存,避免旧缓存和新部署包冲突WEBSITE_ZIP_DEPLOY_USE_ZIP_EXE = 1:使用更稳定的zip解压工具执行部署,降低解压环节出错概率
- 修改Azure DevOps流水线部署配置
找到流水线中的AzureRmWebAppDeployment部署任务,修改配置:- 勾选「部署前将应用服务离线」选项,对应的YAML配置增加
takeAppOffline: true参数,部署前会自动给站点下发app_offline.htm文件,停止应用进程释放锁 - 增加部署重试次数配置,设置部署失败后自动重试2-3次,规避临时网络波动、锁未完全释放的偶发问题
- 勾选「部署前将应用服务离线」选项,对应的YAML配置增加
- 增加预部署重启步骤(高并发场景推荐)
在部署任务之前新增一个Azure CLI任务,执行以下命令提前重启站点,彻底释放所有文件锁:az webapp restart --name <替换为你的App Service名称> --resource-group <替换为对应资源组名称>
完成以上配置后即可彻底解决反复部署失败的问题,不需要每次手动操作Deployment中心。
内容的提问来源于stack exchange,提问作者VKD
相关产品推荐
相关产品推荐

