我正在通過 GitHub 作業流將 .NET Framework Web 應用程式壓縮部署到 Azure 應用程式服務。
我已WEBSITE_RUN_FROM_PACKAGE在 Azure 控制臺Settings / Configuration / Application settings頁面中設定為 1。我也嘗試過設定WEBSITE_RUN_FROM_ZIP為 1 以防萬一(盡管我認為這是一個過時的標志)。
該包在 GitHub 中正確構建,我可以看到它顯示在我的 Kudu 除錯控制臺中,位于C:\home\site\wwwroot(如 MyPackageName.zip)以及C:\home\data\SitePackages(如 20220512205318.zip)下。
我的 YAML 的部署部分是:
deploy:
runs-on: windows-latest
needs: build
environment:
name: 'Test'
url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}
steps:
- name: Download artifact from build job
uses: actions/download-artifact@v2
with:
name: ASP-app
- name: Deploy to Azure Web App
id: deploy-to-webapp
uses: azure/webapps-deploy@v2
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }}
publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE_XYZsecret }}
package: .
我上傳到 GitHub 的 .PublishSettings 看起來像:
<publishData>
<!-- Which one of these 3 profiles is my YAML using? I don't actually know. -->
<publishProfile profileName="mywebappname-test - Web Deploy" publishMethod="MSDeploy" etc="foobar">
<databases/>
</publishProfile>
<publishProfile profileName="mywebappname-test - FTP" publishMethod="FTP" etc="foobar">
<databases/>
</publishProfile>
<publishProfile profileName="mywebappname-test - Zip Deploy" publishMethod="ZipDeploy" etc="foobar">
<databases/>
</publishProfile>
</publishData>
zip 包不會自動解壓縮。我與之交談的 MSFT 支持代表建議這是問題所在,實際上,當我將包下載到我的機器并將其放入 Kudu 的Tools/Zip Push Deploy頁面時,我看到包已解包,我可以通過設定適當的物理路徑以匹配“/”虛擬路徑。特別是 Kudu Tools Zip Push 會導致我的 web.config 和 favicon.ico 等檔案顯示在:
C:\home\site\wwwroot\Content\D_C\a\foo\bar\good\boy\obj\Test\Package\PackageTmp
我可以轉到我的應用服務的 Azure 控制臺,導航到Settings / Configuration/ Path Mappings, Virtual applications and directories并將現有條目編輯為:
Virtual path: /
Physical Path: site\wwwroot\Content\D_C\a\foo\bar\good\boy\obj\Test\Package\PackageTmp
Type: Application
然后在瀏覽器中看到我的網站。
但是,當不做任何事情來解壓縮檔案時,我將條目保留為:
Virtual path: /
Physical Path: site\wwwroot
Type: Application
我無法在瀏覽器中看到我的網站,而只是看到“您無權查看此目錄或頁面”。然后,當我在 Kudo 中挖掘日志時,我在主站點上看到 403.14 - Forbidden 錯誤,在 C:\home\site\wwwroot\favicon.ico 上看到 404.0 - Not Found 錯誤。(就像我的其他檔案一樣,favicon.ico 仍然在 zip 存檔中[...]\foo\bar\good\boy\obj\Test\Package\PackageTmp\favicon.ico。)
我的問題是:
- 我的 web 應用程式是否應該能夠只用我的 zip 檔案就可以運行,
C:\home\site\wwwroot\MyPackageName.zip?或者它真的需要像 MSFT 代表所說的那樣解壓縮嗎? - 如果它應該以這種方式運行,關于我缺少什么的任何想法?我認為它是我的 YAML 中的某些東西(它實際上在這里選擇了 3 個 publishProfile 設定中的哪一個?)或在
Settings / Configuration/ Path Mappingsor中Application settings,但我現在不知道是什么,而且我的想法已經用完了。
謝謝,埃里克
uj5u.com熱心網友回復:
-
如果我的 zip 檔案以 C:\home\site\wwwroot\MyPackageName.zip 的形式存在,我的 Web 應用程式是否能夠完全運行?
差不多,是的,只是不在 wwwroot 中。當啟用 WEBSITE_RUN_FROM_PACKAGE 時,應用程式直接從存檔運行,作為只讀目錄掛載。沒有任何內容被復制到 wwwwroot 或其他任何地方。
-
如果它應該以這種方式運行,關于我缺少什么的任何想法?
我的理解是不支持從 GitHub 部署包,或者說 GitHub 存檔與從應用服務上的包運行不兼容。
uj5u.com熱心網友回復:
居民的回答是對我最初問題的正確答案,但我將在此處添加更多詳細資訊,說明我如何使用這些資訊使我的部署正常作業。我覺得無法讀取 zip 存檔的內部索引 XML 檔案以找到正確的相對路徑是 Azure 缺陷,但在解決之前,我希望其他人會發現這很有用。
我的第一步是放棄部署為 zip 檔案的想法。有可能我仍然可以通過做一些后處理來完成這項作業,以便在沒有嵌套檔案夾的情況下以不同的格式壓縮內容,但我認為在我的情況下,單檔案部署的好處不值得付出代價。為了停止部署為 zip 檔案,我手動編輯了作為 msbuild option 傳入的 .pubxml 檔案/p:PublishProfile=AzureCI.pubxml。我所做的更改是PackageAsSingleFile從 true 更改為 false,并DesktopBuildPackageLocation從 zip 檔案路徑更改為檔案夾路徑。
僅此一項就足以讓我的站點作為單個檔案而不是 zip 存檔部署到 Azure。這些檔案仍然隱藏在一個丑陋的檔案夾結構中,但我至少可以在 Kudu 中看到它們,并通過應用Settings / Configuration/ Path Mappings, Virtual applications and directories我在原始問題中描述的相同調整來使網站正常作業。
我本可以停在那里,但我希望能夠只使用默認的虛擬路徑,而不是讓我的 Azure 配置如此依賴于我的上游行程。換句話說,我只想讓我的 web.config 和 favicon.ico 等直接進入,C:\home\site\wwwroot而不是深入到子檔案夾結構的雜草中。為了完成這項作業,我在我的 YAML 中將 package 引數更改為 webapps-deploy,從 . 到適當的路徑如下:
- name: Deploy to Azure Web App
id: deploy-to-webapp
uses: azure/webapps-deploy@v2
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }}
publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE_XYZsecret }}
package: .\Archive\Content\D_C\a\foo\bar\good\boy\obj\Test\Package\PackageTmp
這導致部署程序僅從構建中挑選出我需要的檔案并將它們放入C:\home\site\wwwroot. 然后我可以恢復路徑映射 kludge 并繼續前進。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/475449.html
