通过 Azure Devops 将 .Net Core 3.1 Web 应用程序部署到 Azure Linux Web 服务时出错
Posted
技术标签:
【中文标题】通过 Azure Devops 将 .Net Core 3.1 Web 应用程序部署到 Azure Linux Web 服务时出错【英文标题】:Error Deploying .Net Core 3.1 Web App to Azure Linux Web Service through Azure Devops 【发布时间】:2020-05-27 05:44:30 【问题描述】:我们正在尝试将 .Net Core 3.1 Web App Service 部署到 Azure,但我们不断遇到一个错误,我们不确定如何解决。我们正在将其部署到应用服务计划 (B1) 进行测试,似乎对于 .Net Core 3.1,我们只能将“代码”发布到 Linux。我们已经通过 Visual Studio 部署了它,完全没有问题,但是通过 Azure Devops 部署时,它部署成功,但似乎无法运行。有几个错误:
加载 /usr/local/lib/php/extensions/no-debug-non-zts-20151012/opcache 失败:/usr/local/lib/php/extensions/no-debug-non-zts- 20151012/opcache:无法打开共享对象文件:没有这样的文件或目录
无法提供目录 /home/site/wwwroot/:没有匹配的 DirectoryIndex (index.php,index.html,default.htm,default.html,index.htm,index.html,index.php,hostingstart .html) 找到,并且选项指令禁止服务器生成的目录索引
这是我们的错误日志:
2020-02-11T17:08:00.415853887Z _____
2020-02-11T17:08:00.415890488Z / _ \ __________ _________ ____
2020-02-11T17:08:00.415897789Z / /_\ \___ / | \_ __ \_/ __ \
2020-02-11T17:08:00.415902989Z / | \/ /| | /| | \/\ ___/
2020-02-11T17:08:00.415907889Z \____|__ /_____ \____/ |__| \___ >
2020-02-11T17:08:00.415913089Z \/ \/ \/
2020-02-11T17:08:00.415917789Z A P P S E R V I C E O N L I N U X
2020-02-11T17:08:00.415922690Z
2020-02-11T17:08:00.415927190Z Documentation: http://aka.ms/webapp-linux
2020-02-11T17:08:00.415931590Z php quickstart: https://aka.ms/php-qs
2020-02-11T17:08:00.415936090Z PHP version : 7.0.33
2020-02-11T17:08:00.415940490Z Note: Any data outside '/home' is not persisted
2020-02-11T17:08:00.809232004Z Running oryx -appPath /home/site/wwwroot -output /opt/startup/startup.sh -bindPort 8080 -startupCommand 'dotnet TestProject.dll; apache2-foreground;'
2020-02-11T17:08:01.052506605Z Oryx Version: 0.2.20191105.2, Commit: 67e159d71419415435cb5d10c05a0f0758ee8809, ReleaseTagName: 20191105.2
2020-02-11T17:08:01.054897394Z Cound not find build manifest file at '/home/site/wwwroot/oryx-manifest.toml'
2020-02-11T17:08:01.055406213Z Could not find operation ID in manifest. Generating an operation id...
2020-02-11T17:08:01.056002335Z Build Operation ID: dfa49d40-fc36-4418-be4c-4886a385fe91
2020-02-11T17:08:02.861636886Z Writing output script to '/opt/startup/startup.sh'
2020-02-11T17:08:03.264793168Z /opt/startup/startup.sh: 7: /opt/startup/startup.sh: dotnet: not found
2020-02-11T17:08:04.221360854Z AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.16.1.5. Set the 'ServerName' directive globally to suppress this message
2020-02-11T17:08:04.387602773Z AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.16.1.5. Set the 'ServerName' directive globally to suppress this message
2020-02-11T17:08:04.409543294Z Failed loading /usr/local/lib/php/extensions/no-debug-non-zts-20151012/opcache: /usr/local/lib/php/extensions/no-debug-non-zts-20151012/opcache: cannot open shared object file: No such file or directory
2020-02-11T17:08:04.634700217Z [Tue Feb 11 17:08:04.634541 2020] [mpm_prefork:notice] [pid 28] AH00163: Apache/2.4.25 (Debian) PHP/7.0.33 configured -- resuming normal operations
2020-02-11T17:08:04.635348542Z [Tue Feb 11 17:08:04.634862 2020] [core:notice] [pid 28] AH00094: Command line: 'apache2 -D FOREGROUND'
2020-02-11T17:08:04.646641464Z 172.16.1.1 - - [11/Feb/2020:17:08:04 +0000] "GET /robots933456.txt HTTP/1.1" 404 341 "-" "-"
2020-02-11T17:08:18.196650781Z [Tue Feb 11 17:08:18.171200 2020] [autoindex:error] [pid 41] [client 172.16.1.1:51779] AH01276: Cannot serve directory /home/site/wwwroot/: No matching DirectoryIndex (index.php,index.html,default.htm,default.html,index.htm,index.html,index.php,hostingstart.html) found, and server-generated directory index forbidden by Options directive
2020-02-11T17:08:18.197972531Z 172.16.1.1 - - [11/Feb/2020:17:08:18 +0000] "GET / HTTP/1.1" 403 363 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"
我们已经为这些版本尝试了许多不同的配置,但似乎没有什么能通过这一步。这是我们的 CI YAML:
这是我们的发布管道配置:
任何细节或正确方向的推动都将不胜感激。我们没有找到太多关于此或如何解决此特定错误的文档。
【问题讨论】:
【参考方案1】:虽然我确实选择了应用服务计划作为 .Net Core 3.1 应用程序,但应用服务本身似乎没有这样设置。为了解决这个问题,您需要转到应用服务的配置选项卡,转到“常规设置”并确保您设置了这些设置:
请注意,在您选择 .Net Core Stack 之前,不会出现主要和次要版本。如果您在创建应用服务计划时将其设置为运行时堆栈,我希望这是更明显和自动设置的东西。我希望这可以帮助其他遇到此问题的人。
更新
当我们推出新版本时,我们意识到 AzureDevops 正在覆盖此堆栈设置。如果用户正在创建发布管道,但他们没有适当的 Azure 访问权限,则不会填充发布中的 Azure 应用服务部署任务中的“运行时堆栈”。具有提升权限的人将看到所有可用的不同选项。目前,要选择的选项是“最新 (DOTNETCORE|最新)”。目前“3.1 (DOTNETCORE|3.1)”不是可用选项。
【讨论】:
我目前正面临您在更新中描述的问题。 Azure Devops 部署管道正在覆盖应用服务配置,并且 devops 没有选择 dotnet core 3.1 的选项。选择“3.0”有效,但前提是我的应用程序是针对 3.0 编译的。 “LTS”和“latest”选项只是用空白覆盖运行时堆栈的应用程序设置(手动输入“3.1”、“3.1.0”、“3.1.x”等具有相同的效果)。 您可以在此处关注 Azure DevOps 问题中缺少的 DOTNETCORE|3.1:github.com/microsoft/azure-pipelines-tasks/issues/12178 遇到了同样的问题,这有助于诊断问题。谢谢以上是关于通过 Azure Devops 将 .Net Core 3.1 Web 应用程序部署到 Azure Linux Web 服务时出错的主要内容,如果未能解决你的问题,请参考以下文章
ML.NET机器学习API容器化与Azure DevOps实践:RESTful API
如何在 Azure DevOps 中安装 net6 的 iOS 工作负载?
Azure DevOps:如何为不同的测试(.net core、angular)合并两个代码覆盖率报告
通过 Azure DevOps 将多个应用程序部署到同一个 Azure Web 应用程序