【问题标题】:Publish to Azure web app sub application fails with 409 error发布到 Azure Web 应用子应用程序失败并出现 409 错误
【发布时间】:2020-04-15 14:50:34
【问题描述】:

我们正在将我们的产品迁移到云端。我目前正在测试将我们的 Web 应用程序部署到 azure Web 应用程序。我们的应用程序由两部分组成。一个 ASP.Net Webforms 应用程序和一个 ASP.Net Web API 项目。这些项目是 2 个独立的应用程序,需要在 azure 中作为 2 个独立的应用程序运行。我已将 Web 应用程序配置如下:

如您所见,api 是根的子应用程序。现在我有 2 个部署任务 (AzureRmWebAppDeployment@4),用于部署网站和 API。部署网站的任务运行没有任何问题。但是,部署 api 的任务会抛出错误:

Got service connection details for Azure App Service:'***'
##[error]Error: Failed to create path 'site/wwwroot/api' from Kudu. Error: Conflict (CODE: 409)
Successfully added release annotation to the Application Insight : ***
Successfully updated deployment History at https://***.scm.azurewebsites.net/api/deployments/***
App Service Application URL: http://***.azurewebsites.net/api
Finishing: Publish API to Azure

显然它无法在 wwwroot 中创建“api”文件夹。

诊断日志显示它确定“api”文件夹不存在,尝试创建时出现冲突错误:

##[debug]Virtual Application Map: Physical path: 'site\wwwroot\api'. Virtual path: '/api'.
##[debug][GET]https://$***:***@***.scm.azurewebsites.net/api/vfs/site/wwwroot/api/
##[debug]loaded affinity cookie ["ARRAffinity=***;Path=/;HttpOnly;Domain=***.scm.azurewebsites.net"]
##[debug]listFiles. Data: {"statusCode":404,"statusMessage":"Not Found","headers":{"cache-control":"no-cache","pragma":"no-cache","content-length":"57","content-type":"application/json; charset=utf-8","expires":"-1","server":"Microsoft-IIS/10.0","x-ms-request-id":"f395b98d-89ca-450e-b4f4-9df4d81f3ef0","x-aspnet-version":"4.0.30319","x-powered-by":"ASP.NET","set-cookie":["ARRAffinity=***;Path=/;HttpOnly;Domain=***.scm.azurewebsites.net"],"date":"Thu, 16 Apr 2020 13:58:57 GMT","connection":"close"},"body":{"Message":"'D:\\home\\site\\wwwroot\\api\\' not found."}}
##[debug]setting affinity cookie ["ARRAffinity=***;Path=/;HttpOnly;Domain=***.scm.azurewebsites.net"]
##[debug][PUT]https://$***:***@***.scm.azurewebsites.net/api/vfs/site/wwwroot/api/
##[debug]Encountered a retriable status code: 409. Message: 'Conflict'.
##[debug][PUT]https://$***:***@***.scm.azurewebsites.net/api/vfs/site/wwwroot/api/
##[debug]Encountered a retriable status code: 409. Message: 'Conflict'.
##[debug][PUT]https://$***:***@***.scm.azurewebsites.net/api/vfs/site/wwwroot/api/
##[debug]Encountered a retriable status code: 409. Message: 'Conflict'.
##[debug][PUT]https://$***:***@***.scm.azurewebsites.net/api/vfs/site/wwwroot/api/
##[debug]Encountered a retriable status code: 409. Message: 'Conflict'.
##[debug][PUT]https://$***:***@***.scm.azurewebsites.net/api/vfs/site/wwwroot/api/
##[debug]createPath. Data: {"statusCode":409,"statusMessage":"Conflict","headers":{"cache-control":"no-cache","pragma":"no-cache","content-length":"87","content-type":"application/json; charset=utf-8","expires":"-1","server":"Microsoft-IIS/10.0","x-ms-request-id":"5a889012-0b6c-421a-9c38-2eced7483369","x-aspnet-version":"4.0.30319","x-powered-by":"ASP.NET","date":"Thu, 16 Apr 2020 13:59:50 GMT","connection":"close"},"body":{"Message":"Cannot delete directory. It is either not empty or access is not allowed."}}
##[debug]Deployment Failed with Error: Error: Failed to create path 'site/wwwroot/api' from Kudu. Error: Conflict (CODE: 409)
##[debug]task result: Failed
##[error]Error: Failed to create path 'site/wwwroot/api' from Kudu. Error: Conflict (CODE: 409)
##[debug]Processed: ##vso[task.issue type=error;]Error: Failed to create path 'site/wwwroot/api' from Kudu. Error: Conflict (CODE: 409)
##[debug]Processed: ##vso[task.complete result=Failed;]Error: Failed to create path 'site/wwwroot/api' from Kudu. Error: Conflict (CODE: 409)

当手动尝试将“api”文件夹添加到 azure web 应用程序时,我也收到错误:

部署 api 的部署任务如下所示:

  - task: AzureRmWebAppDeployment@4
    inputs:
      ConnectionType: 'AzureRM'
      azureSubscription: '***'
      appType: 'webApp'
      WebAppName: '***'
      packageForLinux: '$(Pipeline.Workspace)\API'
      VirtualApplication: 'api'
    displayName: Publish API to Azure

这里有什么问题?有没有关于如何做到这一点的教程?我在 Azure 中配置错误吗?我需要改变什么才能使这项工作?我尝试查看是否可以从 Visual Studio 手动发布 API 以查看它是否在那里工作,但 Visual Studio 似乎不支持通过该接口的子应用程序。

【问题讨论】:

  • 你好朋友,如果你使用 zip deploy 作为部署方式,结果是什么?
  • 使用zip deploy时结果完全一样。我通过将 packageForLinux 属性更改为 '$(Pipeline.Workspace)\API\package.zip' 对其进行了测试
  • @LanceLi-MSFT 我还在原始问题中添加了相关的诊断日志记录
  • 综上所述,我认为您的问题与 azure/kudu 方面更相关,请检查this one 的建议是否对您的方案有帮助。
  • 我看了看,并尝试将模式设置为 webdeploy,但无济于事。您提到的主题也与我的问题完全相反。他不能删除文件夹,而我不能创建文件夹

标签: azure-pipelines azure-web-app-service


【解决方案1】:

问题原来是 AzureRmWebAppDeployment@4 任务自动启用了 WEBSITE_RUN_FROM_PACKAGE 设置。启用此功能会导致整个 wwwroot 文件夹变为只读。但是,界面中的任何地方都没有提及这一点。这使得无法部署子应用程序。禁用此选项可解决此问题。

我现在将尝试在将 API 子应用程序发送到 azure 之前将其包含在包中,以查看子应用程序是否可以正常工作。否则我不能使用“从包运行”选项,尽管它比普通部署有优势

您可以通过在任务中使用以下参数来禁用从包运行:

    

 - task: AzureRmWebAppDeployment@4 
   inputs:         
     packageForLinux: '<path>' 
     enableCustomDeployment: true         
     deploymentType: 'webDeploy'

【讨论】:

  • 您是如何禁用该选项的?
猜你喜欢
  • 1970-01-01
  • 2021-11-21
  • 1970-01-01
  • 2021-09-10
  • 2021-04-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-02
  • 1970-01-01
相关资源
最近更新 更多