हम अपने उत्पाद को क्लाउड में स्थानांतरित करने की प्रक्रिया में हैं। मैं वर्तमान में एज़ूर वेब ऐप्स पर हमारे वेब एप्लिकेशन की तैनाती का परीक्षण कर रहा हूं। हमारे आवेदन में 2 भाग होते हैं। एक ASP.Net वेबफॉर्म एप्लिकेशन, और एक ASP.Net वेब API प्रोजेक्ट। ये परियोजनाएं 2 अलग-अलग अनुप्रयोग हैं, और 2 अलग-अलग अनुप्रयोगों के रूप में नीला में चलाने की आवश्यकता है। मैंने वेब ऐप को निम्नानुसार कॉन्फ़िगर किया है:

enter image description here

जैसा कि आप देख सकते हैं, एपीआई रूट का एक उप अनुप्रयोग है। अब मेरे पास 2 परिनियोजन कार्य हैं (AzureRmWebAppDeployment@4), जो वेबसाइट और 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 में "एपीआई" फ़ोल्डर नहीं बना सकता है।

डायग्नोस्टिक लॉगिंग से पता चलता है कि यह निर्धारित करता है कि "एपीआई" फ़ोल्डर मौजूद नहीं है, और इसे बनाने का प्रयास करते समय एक संघर्ष त्रुटि उत्पन्न होती है:

##[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)

मैन्युअल रूप से "एपीआई" फ़ोल्डर को नीला वेब ऐप में जोड़ने का प्रयास करते समय, मुझे एक त्रुटि भी मिलती है:

enter image description here

एपीआई को तैनात करने के लिए परिनियोजन कार्य इस तरह दिखता है:

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

यहाँ क्या सौदा है? क्या यह कैसे करना है इस पर कोई ट्यूटोरियल है? क्या मैं Azure में कुछ गलत कॉन्फ़िगर कर रहा हूँ? यह काम करने के लिए मुझे क्या बदलने की ज़रूरत है? मैंने यह देखने की कोशिश की है कि क्या मैं विजुअल स्टूडियो से मैन्युअल रूप से एपीआई प्रकाशित कर सकता हूं यह देखने के लिए कि क्या यह वहां काम करता है, लेकिन विजुअल स्टूडियो इंटरफ़ेस के माध्यम से उप अनुप्रयोगों का समर्थन नहीं करता है।

4
PaulVrugt 15 अप्रैल 2020, 17:50

1 उत्तर

सबसे बढ़िया उत्तर

समस्या यह थी कि AzureRmWebAppDeployment@4 कार्य स्वचालित रूप से WEBSITE_RUN_FROM_PACKAGE सेटिंग को सक्षम कर देता है। इसे सक्षम करने से संपूर्ण wwwroot फ़ोल्डर केवल-पढ़ने के लिए बन जाता है। हालाँकि इंटरफ़ेस में कहीं भी इसका कोई उल्लेख नहीं है। इससे उप एप्लिकेशन को तैनात करना असंभव हो जाता है। इस विकल्प को अक्षम करने से समस्या ठीक हो जाती है।

अब मैं एपीआई उप एप्लिकेशन को एज़ूर में भेजने से पहले पैकेज में शामिल करने का प्रयास करने जा रहा हूं, यह देखने के लिए कि उप एप्लिकेशन तब काम करता है या नहीं। अन्यथा मैं सामान्य परिनियोजन पर इसके लाभों के बावजूद, "पैकेज से चलाएँ" विकल्प का उपयोग नहीं कर सकता

आप कार्य में निम्न पैरामीटर का उपयोग करके पैकेज से रन को अक्षम कर सकते हैं:

 - task: AzureRmWebAppDeployment@4 
   inputs:         
     packageForLinux: '<path>' 
     enableCustomDeployment: true         
     deploymentType: 'webDeploy'
3
PaulVrugt 18 पद 2020, 19:46