You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Actions部署Next.js到Azure Web Apps耗时过长如何优化?

问题原因分析
  • 构建环节无依赖缓存:当前配置每次执行npm install都要重新下载全量依赖,没有利用GitHub Actions的缓存能力,依赖量大时会消耗大量时间。
  • 构建产物上传范围过大:配置中上传artifact的路径是.(整个项目目录),包含了node_modules、源代码、临时文件等大量部署不需要的内容,单artifact体积可达数百MB甚至更高,上传、下载环节耗时翻倍,同时部署到Azure时也会因为需要同步的文件数量过多大幅拉长时间,你截图的提示就是Azure在同步大量冗余文件的过程。
  • Next.js构建无优化:未配置Next.js的构建缓存,每次都要全量编译所有页面,项目较大的情况下构建时间会非常久。
  • 工具版本老旧:使用的actions/checkout@v2、actions/setup-node@v1都是多年前的旧版本,性能和兼容性都比新版本差。
优化方案
  • 开启npm依赖缓存
    替换旧的基础步骤,使用新版本Action并开启缓存,同时将npm install替换为更适合CI环境的npm ci,速度更快、依赖安装结果更稳定:
- uses: actions/checkout@v4
- name: Set up Node.js version
  uses: actions/setup-node@v4
  with:
    node-version: '18.x' # 建议升级Node版本,14.x已经停止维护,Next.js新版本也不再支持
    cache: 'npm'
  • 添加Next.js构建缓存
    新增缓存步骤保留Next.js历史构建产物,大幅降低重复构建的时间:
- name: 缓存Next.js构建产物
  uses: actions/cache@v3
  with:
    path: |
      ${{ github.workspace }}/.next/cache
    key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-${{ hashFiles('**.[jt]s', '**.[jt]sx') }}
    restore-keys: |
      ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-
  • 裁剪上传的artifact范围
    只保留Next.js部署必须的文件,不需要上传源代码和全量node_modules:
- name: npm install, build, and test
  run: |
    npm ci
    npm run build --if-present
    npm run test --if-present
- name: 整理部署产物
  run: |
    mkdir -p deploy
    cp -r .next public package.json package-lock.json deploy/ # 只保留运行必须的文件
- name: Upload artifact for deployment job
  uses: actions/upload-artifact@v4
  with:
    name: node-app
    path: deploy # 只传整理后的deploy目录
  • 合并构建和部署步骤(可选)
    如果不需要单独保留构建产物,可以把build和deploy两个job合并成一个,省去artifact上传、下载的时间,能进一步压缩部署时长。
  • Azure端配置优化(可选)
    在Azure Web App的配置页将SCM_DO_BUILD_DURING_DEPLOYMENT参数设置为false,避免Azure侧重复执行构建,因为你已经在GitHub Actions中完成了构建工作。

内容的提问来源于stack exchange,提问作者theKid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 17:36:03