【问题标题】:Nodejs Azure Deployment Failure: ENOENT: no such file or directory, stat '/home/site/wwwroot/node_modules/.bin/semver'Nodejs Azure 部署失败:ENOENT:没有这样的文件或目录,stat '/home/site/wwwroot/node_modules/.bin/semver'
【发布时间】: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


【解决方案1】:

如果有变量 'WEBSITE_WEBDEPLOY_USE_SCM',请导航到您的应用服务并检查应用程序设置并将其设置为 true。

重启应用服务。等待 20 秒,然后重新部署您的应用程序。

【讨论】:

  • 感谢您的建议。我添加了该变量,但仍然得到与上面发布的相同的错误。我将附上我当前应用设置的屏幕截图
【解决方案2】:

我能够通过创建一个新的应用服务 + 一个附加到我们现有存储库的新管道来解决这个问题。

pipeline + App service 都和老的一模一样。

无论出于何种原因,在新设置上进行部署都有效。这不是我发布的原始问题的确切解决方案,但是,我很高兴我现在可以部署代码。如果其他人遇到同样的问题,我建议尝试我所做的同样的事情。

【讨论】:

    【解决方案3】:

    虽然这不是根本原因解决方案,但我发现它比公认的答案更方便,因为它不需要设置新的 Web 应用程序。

    昨天我在 Azure Web 应用程序中遇到了与 semver 依赖项相同的问题。我终于通过ssh-ing into the web app container解决了,删除目录/home/site/wwwroot/node_modules

    我还没有完全弄清楚是什么原因造成的,但这似乎是 Kudu 部署工具与 /node_modules/.bin 文件夹中的符号链接不兼容的问题。

    【讨论】:

      猜你喜欢
      • 2016-08-14
      • 1970-01-01
      • 1970-01-01
      • 2021-06-08
      • 2020-06-03
      • 2021-03-05
      • 2020-12-05
      • 1970-01-01
      • 2021-06-10
      相关资源
      最近更新 更多