我是 Azure 新手,目前正在尝试使用 Azure DevOps 管道将 Node.js API 部署到 Azure Web 服务。部署过程似乎完成且没有错误,但是当我访问 Azure 为我的 API 提供的 URL 时,遇到以下错误:
:( 应用程序错误 如果您是应用程序管理员,您可以访问
这是我的 azure-pipelines.yml 文件供参考:
trigger:
- main
variables:
webAppName: 'api'
environmentName: 'api'
vmImageName: 'ubuntu-latest'
stages:
- stage: Build
displayName: Build stage
jobs:
- job: Build
displayName: Build
pool:
vmImage: $(vmImageName)
steps:
- task: NodeTool@0
inputs:
versionSpec: '20.x'
displayName: 'Install Node.js'
- script: |
npm install
npm run build --if-present
npm run test --if-present
displayName: 'npm install, build and test'
- task: ArchiveFiles@2
inputs:
rootFolderOrFile: '$(System.DefaultWorkingDirectory)'
includeRootFolder: false
archiveType: zip
archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
replaceExistingArchive: true
- upload: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
artifact: drop
- stage: Deploy
displayName: Deploy stage
dependsOn: Build
condition: succeeded()
jobs:
- deployment: Deploy
displayName: Deploy
environment: $(environmentName)
pool:
vmImage: $(vmImageName)
strategy:
runOnce:
deploy:
steps:
- task: AzureWebApp@1
displayName: 'Azure Web App Deploy: api'
inputs:
azureSubscription: $(azureSubscription)
appType: webAppLinux
appName: $(webAppName)
runtimeStack: 'NODE|20.x'
package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
startUpCommand: 'node dist/src/services/server.js'
任何人都可以帮助我确定可能出了什么问题或者我可以采取哪些步骤来诊断和解决此问题?任何帮助将不胜感激,因为我对 Azure 还很陌生。
这是我的 JSON 文件:
"name": "api",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "node dist/src/services/server.js",
"build": "tsc",
"dev": "nodemon --exec ts-node src/index.ts",
"migrate": "node-pg-migrate",
"migrate-up": "DATABASE_URL=$(azureSubscription) npm run migrate up"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"@types/cors": "^2.8.17",
"@types/dotenv": "^8.2.0",
"@types/multer": "^1.4.11",
"bcrypt": "^5.1.1",
"cors": "^2.8.5",
"dotenv": "^16.4.5",
"express": "^4.18.3",
"jsonwebtoken": "^9.0.2",
"multer": "^1.4.5-lts.1",
"pg": "^8.11.3",
"typescript": "^5.3.3",
"uuid": "^9.0.1"
},
"devDependencies": {
"@types/express": "^4.17.21",
"@types/node": "^20.11.24",
"@types/pg": "^8.11.2",
"@types/uuid": "^9.0.8",
"node-pg-migrate": "^6.2.2",
"nodemon": "^3.1.0",
"ts-node": "^10.9.2"
}
}
尝试使用另一个带有
npm run start
的启动命令来启动你的 Nodejs Express api,如下所示:-
我的 Azure devops yaml 管道代码:-
trigger:
- master
variables:
azureSubscription: '7b855bca-812f-408b-bf9c-b66901432ec1'
webAppName: 'siliconwebapp43'
environmentName: 'siliconwebapp43'
vmImageName: 'ubuntu-latest'
stages:
- stage: Build
displayName: Build stage
jobs:
- job: Build
displayName: Build
pool:
vmImage: $(vmImageName)
steps:
- task: NodeTool@0
inputs:
versionSpec: '18.x'
displayName: 'Install Node.js'
- script: |
npm install
npm run build --if-present
npm run test --if-present
displayName: 'npm install, build and test'
- task: ArchiveFiles@2
displayName: 'Archive files'
inputs:
rootFolderOrFile: '$(System.DefaultWorkingDirectory)'
includeRootFolder: false
archiveType: zip
archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
replaceExistingArchive: true
- upload: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
artifact: drop
- stage: Deploy
displayName: Deploy stage
dependsOn: Build
condition: succeeded()
jobs:
- deployment: Deploy
displayName: Deploy
environment: $(environmentName)
pool:
vmImage: $(vmImageName)
strategy:
runOnce:
deploy:
steps:
- task: AzureWebApp@1
displayName: 'Azure Web App Deploy: siliconwebapp43'
inputs:
azureSubscription: $(azureSubscription)
appType: webAppLinux
appName: $(webAppName)
runtimeStack: 'NODE|18.10'
package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
startUpCommand: 'npm run start'
输出:-