发布到Azure Web应用程序子应用程序失败并出现409错误

时间:2020-04-15 14:50:34

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

我们正在将产品迁移到云中。我目前正在测试将我们的Web应用程序部署到Azure Web应用程序的过程。我们的应用程序包括2个部分。一个ASP.Net Webforms应用程序和一个ASP.Net Web API项目。这些项目是2个独立的应用程序,需要作为2个独立的应用程序以天蓝色运行。我已经按照以下步骤配置了Web应用程序:

http://localhost:8080/

如您所见,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应用程序时,我也收到错误消息:

enter image description here

用于部署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似乎不通过该界面支持子应用程序。

1 个答案:

答案 0 :(得分:1)

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

我现在将尝试将API子应用程序包含在包中,然后再将其发送到Azure,以查看子应用程序是否可以正常工作。否则,尽管它比常规部署更具优势,但我无法使用“从程序包运行”选项