Azure App Service部署时持续自动创建子文件夹问题求助
Azure App Service部署时自动生成嵌套"b"文件夹问题排查方案
问题背景
每次部署Web应用到Azure App Service,wwwroot文件夹内都会自动创建名为“b”的子文件夹,工件压缩包被放置其中。将Web应用物理路径设为site\wwwroot\b并通过部署后脚本进入该目录解压的临时方案,在创建用于持久化数据的App_Data文件夹后,部署管道又会在现有“b”文件夹内生成新的“b”子文件夹,形成嵌套问题。
当前使用的Azure DevOps发布管道配置:
steps: - task: AzureRmWebAppDeployment@4 displayName: 'Azure App Service Deploy' inputs: azureSubscription: 'PAYG(guid)' WebAppName: AppName ScriptType: 'Inline Script' InlineScript: | cd b unzip AppName.zip rm AppName.zip enableCustomDeployment: true RemoveAdditionalFilesFlag: true AdditionalArguments: '-skip:objectName=dirPath.absolutePath=wwwroot' # 尝试强制根目录但无效 RenameFilesFlag: false continueOnError: true
解决思路
1. 修正自定义部署脚本的路径逻辑
启用enableCustomDeployment后,任务默认将部署包上传到临时工作目录,而非直接到wwwroot。当前脚本的cd b逻辑是在临时目录中寻找“b”文件夹,反而会触发嵌套创建:
- 修改脚本,直接将解压内容同步到
wwwroot根目录,示例:
或使用更可靠的# 直接解压到wwwroot unzip AppName.zip -d /home/site/wwwroot rm AppName.ziprobocopy同步命令:robocopy . /home/site/wwwroot /E /XO rm AppName.zip
2. 移除无效的AdditionalArguments配置
-skip:objectName=dirPath.absolutePath=wwwroot不符合Kudu部署参数语法,会干扰默认路径逻辑,直接删除该配置项。
3. 关闭自定义部署,使用任务默认逻辑
如果无需自定义脚本,直接关闭enableCustomDeployment,让AzureRmWebAppDeployment@4自动完成包的解压与同步到wwwroot:
- 删除
ScriptType、InlineScript、enableCustomDeployment相关配置,任务会按默认流程部署。
4. 检查App Service部署设置
- 进入Azure Portal的App Service → 部署中心 → 部署设置,确认无自定义部署路径配置;
- 检查是否启用
WEBSITE_RUN_FROM_PACKAGE应用设置,若启用,部署包会被挂载而非解压,可能导致路径异常,可临时关闭测试。
5. 排查部署包本身结构
确认CI生成的AppName.zip内部是否自带“b”文件夹结构。如果包本身包含该嵌套,部署时会同步到wwwroot,需调整CI构建步骤,确保构建输出直接打包,无多余嵌套文件夹。
内容的提问来源于stack exchange,提问作者Dominik H
相关产品推荐
相关产品推荐

