我正在通过GitHub工作流将。net框架web应用程序压缩部署到Azure应用程序服务。
我在Azure控制台的Settings / Configuration / Application settings
页面中将WEBSITE_RUN_FROM_PACKAGE
设置为1。我还尝试将WEBSITE_RUN_FROM_ZIP
设置为1,以防万一(尽管我认为这是一个过时的标志)。
该包在GitHub中正确构建,我可以看到它出现在我的Kudu调试控制台上,在C:homesitewwwroot
(如MyPackageName.zip)以及C:homedataSitePackages
(如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: .
和。publishsettings我上传到GitHub看起来像:
<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包是而不是被自动解压缩。与我交谈过的微软支持代表建议这就是问题所在,当我将软件包下载到我的机器并将其放入Kudu的Tools/Zip Push Deploy
页面时,我看到软件包被解包,并且我可以通过设置适当的物理路径来匹配'/'虚拟路径来使站点工作。特别是Kudu Tools Zip Push使我的网页。Config和favicon.ico等文件显示在:
C:homesitewwwrootContentD_CafoobargoodboyobjTestPackagePackageTmp
,我可以转到Azure控制台为我的应用程序服务,导航到Settings / Configuration/ Path Mappings, Virtual applications and directories
,并编辑现有的条目:
Virtual path: /
Physical Path: sitewwwrootContentD_CafoobargoodboyobjTestPackagePackageTmp
Type: Application
然后看到我的网站出现在浏览器中
然而,当不做任何事情来解包存档时,我将条目保留为:
Virtual path: /
Physical Path: sitewwwroot
Type: Application
我无法在浏览器中看到我的网站,而只能看到"您没有权限查看此目录或页面。"当我挖掘工藤的日志时,我在我的主站上看到了403.14 -禁止错误,在C:homesitewwwrootfavicon.ico上看到了404.0 -未发现错误。(像我的其他文件一样,favicon.ico仍然在[...]foobargoodboyobjTestPackagePackageTmpfavicon.ico
的zip存档中。)
我的问题是:
- 我的web应用程序应该能够运行,只是我的zip文件坐在那里作为
C:homesitewwwrootMyPackageName.zip?
,或者它真的需要像微软代表指出的那样解包吗? - 如果它应该以这种方式运行,我错过了什么想法?我认为这是我的YAML中的东西(3个publishProfile设置中哪一个是在这里实际选择的?)或
Settings / Configuration/ Path Mappings
或Application settings
,但我不知道在这一点上是什么,我已经没有想法了。
谢谢,Eric
-
我的web应用程序应该能够运行在所有只是我的zip文件坐在那里作为C:homesitewwwroot mypackame .zip?
差不多,是的,只是不在wwwroot中。当启用WEBSITE_RUN_FROM_PACKAGE时,应用程序将作为只读目录挂载直接从存档运行。没有任何内容被复制到wwwwroot或其他任何地方。
-
如果它应该以这种方式运行,我错过了什么想法?
我的理解是不支持从GitHub部署包,或者更确切地说,GitHub存档与在App Service上运行包不兼容。
dwellman的回答是对我最初问题的正确答案,但我将在这里添加更多细节,说明如何使用这些信息使部署正常工作。我觉得无法读取zip存档的内部索引XML文件以找到正确的相对路径是Azure的一个缺陷,但在解决这个问题之前,我希望其他人会觉得这很有用。
我的第一步是放弃作为zip文件部署的想法。我可能仍然可以通过一些后期处理,以不同的格式压缩内容,而不使用嵌套文件夹,但在我的情况下,我认为单文件部署的好处不值得付出代价。为了停止作为zip文件部署,我手动编辑了作为msbuild选项/p:PublishProfile=AzureCI.pubxml
传入的.pubxml文件。我所做的更改是将PackageAsSingleFile
从true更改为false,并将DesktopBuildPackageLocation
从zip文件路径更改为文件夹路径。
仅这一点就足以让我的站点作为单独的文件而不是zip存档部署到Azure。这些文件仍然隐藏在一个丑陋的文件夹结构中,但我至少可以在Kudu中看到它们,并通过应用我在原始问题中描述的相同的Settings / Configuration/ Path Mappings, Virtual applications and directories
调整使网站正常工作。
我本可以停在那里,但我希望能够只使用默认的虚拟路径,而不是让我的Azure配置如此依赖于我的上游进程。换句话说,我只想要我的网。config和favicon.ico等直接放在C:homesitewwwroot
中,而不是在子文件夹结构的杂草中。为了做到这一点,我将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: .ArchiveContentD_CafoobargoodboyobjTestPackagePackageTmp
这导致部署过程只从构建中挑选出我需要的文件,并将它们放入C:homesitewwwroot
。然后我就可以恢复路径映射组合,继续我的工作了。