Azure Node.js Web App推送到GitHub时Node.js 12 Actions弃用警告问题
我最近在Azure中创建了一个Node.js Web应用,关联GitHub仓库时,Azure自动在仓库里生成了.github/workflows/main_myAppName.yml的工作流文件,用来实现git push后自动部署到Azure。
推送代码后,在GitHub Actions运行页面看到警告:
build
Node.js 12 actions are deprecated. 请更新以下使用Node.js 16的action:actions/checkout@v2, actions/setup-node@v1, actions/upload-artifact@v2
我没创建过这个工作流文件,也不了解它的用法,有两个疑问:
- Azure会不会自动修改这个工作流文件来符合GitHub的要求?
- 还是得我自己持续关注规则变更,手动学习修复?
另外还有两个小问题:
- 我用的是Azure免费应用服务层,构建部署耗时超30分钟,是不是因为免费层的原因?
- 收到“artifact里超过10000个文件”的警告,但我的应用根本没这么多文件,而且
node_modules已经在.gitignore里了,这是怎么回事?
补充:
附上自动生成的工作流文件内容:
# 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 - myAppNameHere 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: npm install, build, and test run: | npm install npm run build --if-present npm run test --if-present - name: Upload artifact for deployment job uses: actions/upload-artifact@v2 with: name: node-app path: . 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 - name: 'Deploy to Azure Web App' id: deploy-to-webapp uses: azure/webapps-deploy@v2 with: app-name: 'myAppNameHere' slot-name: 'Production' publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE_SOME-LONG-CODE-HERE }} package: .
我完全不懂工作流,要是得自己改的话,能不能给具体的修改指导?
关于Azure是否自动更新工作流文件
Azure不会自动修改已生成的工作流文件。这个文件一旦创建就属于你的GitHub仓库,Azure不会主动干预更新。后续GitHub Actions的规则变更,需要你自己手动维护这个文件。
手动更新工作流文件的具体步骤
你只需要把警告里提到的几个action版本升级到支持Node.js 16+的版本就行,这些修改不会改变原有部署逻辑,只是升级依赖版本,不会搞砸现有配置。
修改后的完整工作流文件:
# 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 - myAppNameHere on: push: branches: - main workflow_dispatch: jobs: build: runs-on: ubuntu-latest steps: # 升级到v4版本,支持Node.js 20 - uses: actions/checkout@v4 - name: Set up Node.js version # 升级到v4版本,支持Node.js 16+ uses: actions/setup-node@v4 with: node-version: '18.x' - name: npm install, build, and test run: | npm install npm run build --if-present npm run test --if-present - name: Upload artifact for deployment job # 升级到v4版本,支持Node.js 20 uses: actions/upload-artifact@v4 with: name: node-app path: . 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 # 同步升级到v4版本,保持兼容性 uses: actions/download-artifact@v4 with: name: node-app - name: 'Deploy to Azure Web App' id: deploy-to-webapp # 升级到v4版本,支持Node.js 20,更稳定 uses: azure/webapps-deploy@v4 with: app-name: 'myAppNameHere' slot-name: 'Production' publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE_SOME-LONG-CODE-HERE }} package: .
修改说明:
actions/checkout@v2→actions/checkout@v4:v4版本基于Node.js 20,完全符合GitHub要求actions/setup-node@v1→actions/setup-node@v4:v4版本支持Node.js 16+,功能更完善actions/upload-artifact@v2→actions/upload-artifact@v4:v4版本基于Node.js 20actions/download-artifact@v2→actions/download-artifact@v4:和upload保持版本一致,避免兼容性问题azure/webapps-deploy@v2→azure/webapps-deploy@v4:v4版本支持Node.js 20,稳定性更好
额外问题解答
- 免费层部署耗时久:是的,Azure免费应用服务层的CPU、内存配额有限,还会出现实例休眠的情况,所以构建部署速度会很慢。换成标准层后,资源配额提升,速度会大幅加快。
- artifact文件数超10000:你当前的工作流是把整个项目目录(
path: .)作为artifact上传,虽然node_modules在.gitignore里,但npm install是在GitHub Actions的运行环境中执行的,node_modules会被安装到运行环境里,然后被一起打包上传。
解决办法是修改upload-artifact的path,只上传部署需要的文件:
- 如果是React/Vue等单页应用,只上传
build或dist目录:path: build - 如果是Node.js后端应用,只上传源码、
package.json等必要文件,比如:- name: Upload artifact for deployment job uses: actions/upload-artifact@v4 with: name: node-app path: | src/ package.json package-lock.json # 其他你需要部署的文件/目录
也可以创建.artifactignore文件,用法和.gitignore类似,用来排除不需要上传的文件。
内容的提问来源于stack exchange,提问作者user1063287

