【发布时间】:2021-09-29 16:09:19
【问题描述】:
几天前,我们的生产发布管道开始失败并出现以下错误:
2020-10-17T00:14:13.1233435Z Omitting next output lines...
2020-10-17T00:14:13.1234108Z Error: ENOENT: no such file or directory, stat '/home/site/wwwroot/node_modules/.bin/semver'
2020-10-17T00:14:13.1234825Z An error has occurred during web site deployment.
2020-10-17T00:14:13.1235127Z Kudu Sync failed
2020-10-17T00:14:13.1235451Z \n/opt/Kudu/Scripts/starter.sh "/home/site/deployments/tools/deploy.sh"
2020-10-17T00:14:13.1265401Z ##[error]Failed to deploy web package to App Service.
2020-10-17T00:14:13.1276348Z ##[error]Error: Package deployment using ZIP Deploy failed. Refer logs for more details.
2020-10-17T00:14:13.6429241Z Successfully updated deployment History at https://{omitted}.scm.azurewebsites.net/api/deployments/{omitted}
2020-10-17T00:14:13.6510314Z ##[section]Finishing: Deploy Azure App Service
管道将成功完成所有测试/脚本 + 发布 drop 工件。发布过程开始,但在部署步骤中失败并出现上述错误。
我已尝试回滚到确实成功部署的最后一个工作提交,但在这一步仍然会失败。
我花了几天时间试图解决这个问题,但没有任何运气。有什么想法会导致这样的事情随机发生吗?
如果有助于调试,我可以提供有关我们堆栈的其他信息。
编辑
我当前的应用设置:
azure-pipelines.yml
trigger:
- master
variables:
# Azure Resource Manager connection created during pipeline creation
azureSubscription: '9690121f-a50b-43c0-8d1b-e8ca6533b2d5'
# Web app name
webAppName: 'hidden'
# Environment name
environmentName: 'hidden'
# Agent VM image name
vmImageName: 'ubuntu-latest'
stages:
- stage: Build
displayName: Build stage
jobs:
- job: Build
displayName: Build
pool:
vmImage: $(vmImageName)
steps:
- task: NodeTool@0
inputs:
versionSpec: '12.x'
displayName: 'Install Node.js'
- task: YarnInstaller@3
inputs:
versionSpec: '1.22.4'
displayName: 'Install Yarn'
- script: |
yarn install
yarn build
yarn test:e2e
displayName: '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: hidden'
inputs:
azureSubscription: '$(azureSubscription)'
appType: 'webAppLinux'
appName: '$(webAppName)'
package: '$(Pipeline.Workspace)/drop/$(Build.BuildId).zip'
runtimeStack: 'NODE|12.x'
startUpCommand: 'node dist/main'
【问题讨论】:
-
您是否尝试过删除 semver 依赖项。 Kudu 似乎无法很好地处理链接文件stackoverflow.com/questions/52983708/…。 BTW,这个问题是随机出现还是一直存在?
-
在不知道您的上下文的情况下,仅仅因为巧合的时间,您使用证书固定的任何机会和 MS 在您的应用程序中翻转了它。他们最近开始滚动证书:docs.microsoft.com/en-us/azure/security/fundamentals/…这是否相关?
-
@LeoLiu-MSFT Semver 不是我们的直接依赖项。自从上次成功运行部署以来,我只安装了一个额外的依赖项(js-yaml)。我尝试回滚到最后一个不包含此依赖项的提交,但它仍然失败。所以我猜我已经安装的现有部门之一必须使用它?我可以在每次部署尝试时重现此问题。
-
@LeftyGBalogh 我不确定什么是证书固定 - 但是,我们的生产域证书确实来自 Azure。
标签: node.js azure deployment azure-pipelines