Azure本地Git部署问题:wwwroot文件与Git仓库内容不一致
解决Azure App Service本地Git部署后wwwroot残留旧文件的问题
一、快速清理旧文件的临时办法
1. 用部署钩子自动清理
在项目根目录新建两个文件:
.deployment:指定部署脚本路径
[config] command = deploy.cmd
deploy.cmd:先执行清理再跑默认构建流程
@echo off REM 清空wwwroot目录 rmdir /s /q "%DEPLOYMENT_TARGET%" mkdir "%DEPLOYMENT_TARGET%" REM 继续执行Oryx的默认构建部署 call "%SCM_BUILD_ARGS%"
如果习惯用PowerShell,也可以用deploy.ps1替代deploy.cmd:
# 强制删除wwwroot所有内容,忽略删除空目录的错误 Remove-Item -Path $env:DEPLOYMENT_TARGET -Recurse -Force -ErrorAction SilentlyContinue New-Item -Path $env:DEPLOYMENT_TARGET -ItemType Directory -Force # 调用默认构建流程 & $env:SCM_BUILD_ARGS
把这两个文件提交到Git仓库,下次推送部署时就会自动先清空再更新。
2. 手动应急清理
临时处理残留文件的话,直接登录Kudu控制台(https://<你的应用名>.scm.azurewebsites.net/DebugConsole),执行命令删除目标文件:
比如只清理prisma/migrations的旧文件:
rm -rf /home/site/wwwroot/prisma/migrations/*
要清空整个wwwroot就用:
rm -rf /home/site/wwwroot/*
二、长期可靠的部署方案
1. 换成Zip部署彻底替换内容
Zip部署会全量覆盖wwwroot目录,从根源避免旧文件残留。在CI/CD流水线里按以下步骤操作:
- 本地执行
npm run build完成应用构建 - 将构建产物打包成Zip文件
- 用Azure CLI命令部署:
az webapp deploy --resource-group <你的资源组名> --name <应用名> --src-path <构建产物的zip路径> --type zip
2. 给Oryx配置环境变量自动清理
Oryx自带清理开关,只需在App Service中添加一个环境变量:
- 进入Azure门户,找到你的App Service → 配置 → 应用程序设置
- 新增设置:键为
CLEAR_TARGET_DIRECTORY,值为true - 保存后,后续每次Oryx构建部署都会先清空wwwroot再复制新文件
3. 用专业CI/CD工具精准控制流程
切换到GitHub Actions或Azure DevOps Pipeline,这类工具自带清理参数。比如GitHub Actions的部署步骤添加clean: true:
- name: 部署到Azure App Service uses: azure/webapps-deploy@v2 with: app-name: '<你的应用名>' publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }} package: '.' clean: true # 开启该参数会先清理旧文件再部署
内容的提问来源于stack exchange,提问作者arvil
相关产品推荐
相关产品推荐

