通过GitHub Actions部署Azure的Node子目录应用无法启动求助
问题背景
将GitHub仓库子目录src/server_example中的Express服务通过GitHub Actions部署到Azure Web App后,构建和部署流程均显示成功,但访问Web App URL时仍显示Azure默认提示页面Your web app is running and waiting for your content,服务未正常启动。
仓库目录结构:
.github workflows main_serverexamplewebapp.yml src server_example package.json server.js project_2
核心原因
GitHub Actions的upload-artifact步骤错误地将整个仓库根目录作为工件上传,导致Azure Web App的站点根目录(site/wwwroot)包含完整仓库结构,而非src/server_example下的核心文件。Azure无法在站点根目录找到package.json,因此不会执行启动脚本。
解决方案
1. 修正GitHub Actions的工件上传路径
修改build任务中的Upload artifact for deployment job步骤,指定仅上传src/server_example目录内的所有文件:
- name: Upload artifact for deployment job uses: actions/upload-artifact@v2 with: name: node-app path: ./src/server_example/**/*
此配置会将server_example目录下的package.json、server.js及依赖包直接上传,部署后Azure站点根目录将直接包含这些核心文件。
2. (可选)规范package.json配置
将package.json中的main字段从index.js改为server.js,保持与启动脚本一致(不影响功能,但更符合规范):
{ "name": "server_example", "version": "1.0.0", "description": "", "main": "server.js", "scripts": { "start": "node server.js" }, // 其他字段不变 }
3. 验证部署效果
重新触发GitHub Actions部署后,可通过Azure门户的高级工具 > SSH/Kudu控制台查看site/wwwroot目录,确认根目录下存在package.json和server.js。此时Azure会自动执行npm start启动服务,访问Web App URL即可看到预期的{"message": "Welcome!"}响应。
内容的提问来源于stack exchange,提问作者pupadupa

