Azure YAML 部署失败并显示“错误:无法将 Web 包部署到应用服务。冲突(代码:409)”

Posted

技术标签:

【中文标题】Azure YAML 部署失败并显示“错误:无法将 Web 包部署到应用服务。冲突(代码:409)”【英文标题】:Azure YAML Deployment failing with "Error: Failed to deploy web package to App Service. Conflict (CODE: 409)" 【发布时间】:2020-05-01 15:07:35 【问题描述】:

希望有人也看到了这一点。 我们最后一次成功的构建是在 2019 年 12 月 6 日。 新的部署尝试在部署步骤失败(构建和发布管道中的相同问题)。

报错如下:

Got service connection details for Azure App Service:'OUR SITE'
Package deployment using ZIP Deploy initiated.
##[error]Failed to deploy web package to App Service.
##[error]Error: Error: Failed to deploy web package to App Service. Conflict (CODE: 409)
##[warning]Error: Failed to update deployment history. Error: Bad Request (CODE: 400)
App Service Application URL: OUR SITE

这是我们的部署YAML,很抱歉这几天来了:(

# Node.js Express Web App to Linux on Azure
# Build a Node.js Express app and deploy it to Azure as a Linux web app.
# Add steps that analyze code, save build artifacts, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/javascript

trigger:
- master

variables:

  # Azure Resource Manager connection created during pipeline creation
  azureSubscription: '[OUR SUB ID]'

  # Web app name
  webAppName: 'website-to-deploy'

  # Environment name
  environmentName: 'web-to-deploy'

  # 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: '10.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
    - task: AzureRmWebAppDeployment@4
      inputs:
        ConnectionType: 'AzureRM'
        azureSubscription: 'OUR SUBSCRIPTION'
        appType: 'webAppLinux'
        WebAppName: 'site-to-deploy'
        packageForLinux: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
        RuntimeStack: 'NODE|12-lts'
        StartupCommand: 'npm start'
        AppSettings: 'WE DO HAVE SOME SETTINGS'     

请注意: 我尝试将WEBSITE_WEBDEPLOY_USE_SCM = true 添加到配置中,但没有帮助。 上述构建 YAML 没有任何更改,它已成功运行并馈送到发布管道

感谢您的帮助。

更新:通过 MS Dev-Ops 提出的票证 您可以在变量部分添加 system.debug: true 以获得更详细的日志记录。 这让我看到AppService 返回409 代码,因为它认为已经在进行部署。 如果我得到解决方案,我会编辑这篇文章。

这里是调试信息:

##[debug]Encountered a retriable status code: 409. Message: 'Conflict'.
##[debug][POST]https://$web040-glndev-com:***@web040-glndev-com.scm.azurewebsites.net/api/zipdeploy?isAsync=true&deployer=VSTS_ZIP_DEPLOY
##[debug]Could not parse response: 
##[debug]Response: undefined
##[debug]Encountered a retriable status code: 409. Message: 'Conflict'.
##[debug][POST]https://$web040-glndev-com:***@web040-glndev-com.scm.azurewebsites.net/api/zipdeploy?isAsync=true&deployer=VSTS_ZIP_DEPLOY
##[debug]Could not parse response: 
##[debug]Response: undefined
##[debug]ZIP Deploy response: "statusCode":409,"statusMessage":"Conflict","headers":"transfer-encoding":"chunked","content-type":"text/plain; charset=utf-8","server":"Kestrel","date":"Wed, 15 Jan 2020 17:40:47 GMT","connection":"close","body":"There is a deployment currently in progress. Please try again when it completes."
##[error]Failed to deploy web package to App Service.
##[debug]Processed: ##vso[task.issue type=error;]Failed to deploy web package to App Service.
##[debug]task result: Failed
##[error]Error: Error: Failed to deploy web package to App Service. Conflict (CODE: 409)
##[debug]Processed: ##vso[task.issue type=error;]Error: Error: Failed to deploy web package to App Service. Conflict (CODE: 409)
##[debug]Processed: ##vso[task.complete result=Failed;]Error: Error: Failed to deploy web package to App Service. Conflict (CODE: 409)
##[debug][POST]https://management.azure.com/subscriptions/7a7aad03-79b0-4118-8dd1-8ebd63716c6a/resourceGroups/appsvc_linux_centralus/providers/Microsoft.Web/sites/web040-glndev-com/config/appsettings/list?api-version=2016-08-01
##[debug]Correlation ID from ARM api call response : e4ebaf0f-7ccf-4b7b-ba4d-b70b8fd13bea
##[debug]Application Insights is not configured for the App Service. Skipping adding release annotation.

票在这里:409 Unable to deploy web package

【问题讨论】:

【参考方案1】:

重启应用服务解决了我的问题。

我的应用服务计划已经是付费订阅,容量没有问题。我刚刚重新启动了应用服务,一切正常。

【讨论】:

我试过这个,但我遇到了同样的问题。我正在使用具有消费计划的功能应用程序。不确定这是否会改变事情。【参考方案2】:

所以在与 MS 支持进行大量讨论后,Here is the ticket

事实证明,真正的问题是我的应用服务计划已满负荷。在开发中,我们使用的是免费服务,但存在限制。我们已经达到了这个限制,消息实际上是一个红鲱鱼,根本不是真正的问题。

不管怎样,我升级到了第一层付费订阅,现在一切正常。

【讨论】:

另外请检查是否有任何正在进行的部署到同一个应用服务(也许另一个管道正在运行?) @Eray 不,我也有这方面的 MS。最终结果确实是我超出了免费实例的资源。 我在我的生产应用服务中启用了应用程序日志!。日志文件存储在文件系统中,因此我的文件系统已满,我无法创建新插槽,甚至无法进行新部署。清除日志文件 (/home/LogFiles) 解决了我的问题 “应用服务计划已满”是什么意思?我试图了解容量不足如何导致发布时间警告。我问是因为我们现在收到了同样的警告。但在我们升级计划之前,我想能够解释为什么我们必须升级计划。 (谢谢) 对我来说,解决方案是重新启动网络应用程序。升级也会重新启动应用程序,因此值得尝试重新启动并首先重新发布以节省升级成本。【参考方案3】:

目前(2020 年 7 月/2020 年 8 月),问题实际上是 Microsoft 对支持某些地区应用服务的 VM 的更新,如此 github 问题所述:https://github.com/projectkudu/kudu/issues/3042

解决方法(在此回复中列出:https://github.com/projectkudu/kudu/issues/3042#issuecomment-665997217)似乎有所帮助。要么

    通过 SCM 门户重新启动 Kudu(通过 Process Explorer 选项卡杀死 w3wp 进程) 重启应用服务(导致停机) 向上和向下扩展您的服务(尽管有些人报告说他们必须在两者之间进行部署)

【讨论】:

【参考方案4】:

我遇到了同样的错误,问题在于 webapp 的大小。我尝试将超过 1 GB 的 webapp 部署到应用服务计划层为 1GB 的 Azure webapp。

【讨论】:

【参考方案5】:

我犯的一个错误是从另一个函数应用复制所有配置,包括 WEBSITE_ENABLE_SYNC_UPDATE_SITE 和 WEBSITE_RUN_FROM_PACKAGE。删除它们并重新部署。

【讨论】:

在我对 Function App 进行故障排除并直接从 IDE 发布它后,我遇到了这种情况。在删除这些参数之前,我无法再部署它。【参考方案6】:

我也遇到了这个问题,因为日志文件损坏(并且在 kudu/部署过程崩溃之后)。如果您有一个 linux 实例,您可以将选项 AppService log 关闭(重新启动),然后再次打开它

【讨论】:

以上是关于Azure YAML 部署失败并显示“错误:无法将 Web 包部署到应用服务。冲突(代码:409)”的主要内容,如果未能解决你的问题,请参考以下文章

Azure部署失败

Yaml Azure Devops TerraformInstaller 不明确

Azure Pipelines Stages (YAML) 上的手动触发器

如何顺序运行Azure管道生成

Azure 应用服务部署失败并出现错误:“凭据”不能为空

如何在 azure devops YAML 管道中将单个代理用于多个作业/阶段