首次通过GitHub Actions部署React应用至Azure Web App遇磁盘空间不足错误
解决GitHub Actions部署React到Azure Web App时的磁盘空间不足问题
问题核心分析
你遇到的磁盘空间不足报错,不一定是artifact总大小超过1GiB导致的:
- ZIP部署时,Azure会先将压缩包解压到临时目录,这个目录和Web App的主存储共享磁盘空间,加上之前部署残留的临时文件,很容易触发空间不足。
- 文件数量超过40000个时,会占用大量磁盘inode(文件索引节点),哪怕总容量还有剩余,inode耗尽也会导致"磁盘空间不足"的错误。
具体解决步骤
1. 清理部署残留文件
在GitHub Actions的部署步骤前,添加清理Azure Web App临时部署文件的操作:
- name: Clean up old deployment artifacts uses: azure/cli@v1 with: inlineScript: | az webapp deployment source delete --name <你的Web App名称> --resource-group <你的资源组名称>
或者在部署步骤中启用自动清理:
- name: Deploy to Azure Web App uses: azure/webapps-deploy@v2 with: app-name: <你的Web App名称> slot-name: production package: ${{ steps.build.outputs.webapp-path }} clean: true # 启用清理,删除旧的文件
2. 大幅减少构建产物的文件数量和大小
(1)确保只上传React生产构建产物
不要把node_modules、源码、测试文件等打包到artifact里,只保留build(或dist)目录下的文件:
在GitHub Actions的上传artifact步骤中明确指定路径:
- name: Upload artifact for deployment job uses: actions/upload-artifact@v3 with: name: react-app path: ./build/ # 只上传build目录
(2)优化React构建过程
- 关闭source map(会生成大量
.map文件):在package.json的build命令中添加GENERATE_SOURCEMAP=false:"scripts": { "build": "GENERATE_SOURCEMAP=false react-scripts build" } - 确认生产构建已启用代码压缩和tree shaking:React生产构建默认已开启,若已eject项目可检查
webpack.config.js确保配置正确。 - 合并小资源文件:使用webpack插件将多个小CSS/JS文件合并,减少文件总数。
(3)过滤不必要的文件
在项目根目录创建.artifactignore文件,排除不需要打包的文件:
node_modules/ src/ public/*.map README.md .gitignore
3. 使用Run From Package模式(推荐)
这种模式不需要解压ZIP包,直接从压缩文件运行应用,彻底避免解压时的空间占用问题:
- 在GitHub Actions部署步骤中添加应用设置:
- name: Deploy to Azure Web App uses: azure/webapps-deploy@v2 with: app-name: <你的Web App名称> slot-name: production package: ${{ steps.build.outputs.webapp-path }} app-settings: WEBSITE_RUN_FROM_PACKAGE=1
- 或者在Azure Portal的Web App「配置」>「应用设置」中添加
WEBSITE_RUN_FROM_PACKAGE = 1。
额外排查点
- 登录Azure Portal,进入Web App的「高级工具」>「Kudu」,查看
D:\home和D:\local目录的空间使用情况,确认是总容量不足还是inode耗尽。 - 检查构建过程中是否生成了重复文件,比如多次构建的缓存文件。
内容的提问来源于stack exchange,提问作者Nikoloz97
相关产品推荐
相关产品推荐

