如何通过GitHub Workflows在Azure Web App服务器端解压部署归档包
解决方案:直接部署Zip包到Azure Web App,由服务器端自动解压
Azure Web App的部署机制支持直接上传Zip包并在服务器端自动解压,完全不需要在GitHub Actions的部署步骤中先解压文件。你只需要修改deploy阶段的配置,直接将Zip包作为部署源即可,这样能大幅减少文件传输的数量和耗时。
修改后的完整Workflow配置
# Docs for the Azure Web Apps Deploy action: https://github.com/Azure/webapps-deploy # More GitHub Actions for Azure: https://github.com/Azure/actions name: Build and deploy Node.js app to Azure Web App on: push: branches: - main workflow_dispatch: jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up Node.js version uses: actions/setup-node@v1 with: node-version: '18.x' - name: build client env: VITE_API_URL: "https://mysite.azurewebsites.net" run: | npm install npm run build --if-present npm run test --if-present - name: build server run: | cd server npm install cd .. - name: Zip artifact for deployment run: zip release.zip ./* -r - name: Upload artifact for deployment job uses: actions/upload-artifact@v2 with: name: node-app path: release.zip deploy: runs-on: ubuntu-latest needs: build environment: name: 'Production' url: ${{ steps.deploy-to-webapp.outputs.webapp-url }} steps: - name: Download artifact from build job uses: actions/download-artifact@v2 with: name: node-app # 移除解压步骤,直接部署Zip包 - name: 'Deploy to Azure Web App' id: deploy-to-webapp uses: azure/webapps-deploy@v2 with: app-name: 'myapp' slot-name: 'Production' publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }} package: ./release.zip # 直接指定Zip包路径
关键修改点说明
- 删掉了部署阶段的
unzip artifact for deployment步骤,不再需要在GitHub Runner上解压文件 - 将
azure/webapps-deploy@v2的package参数从.改为./release.zip,直接传入压缩包路径
这样部署时,GitHub Actions只会把一个Zip文件传输到Azure,Azure Web App会自动在服务器端完成解压操作,彻底解决大量小文件传输耗时的问题。
额外优化建议
如果想进一步压缩Zip包大小,减少传输时间,可以在打包时排除不必要的文件:
- 在
Zip artifact for deployment步骤中添加排除规则:
zip release.zip ./* -r -x "node_modules/*" "server/node_modules/*" ".git/*" ".github/*"
注意:如果你的应用依赖这些目录里的文件(比如server的node_modules是运行时必需的),则不要排除对应的目录。
内容的提问来源于stack exchange,提问作者Trevor
相关产品推荐
相关产品推荐

