我有一个用 dotnet core 3.1 编写的完全可用的 Web api。我一直在关注TimCoRetailManager series 。 该应用程序构建时没有错误,并且在 Visual Studio 中运行时按预期工作。我有免费的 Azure 订阅。我在 Linux 上设置了一个 F1 免费 Web 应用程序服务和两个基本 SQL Server 数据库,所有这些都位于同一资源组中,并且防火墙设置为允许访问其他 Azure 服务进行连接。我可以发布 Web api 和数据库。我可以使用 azure data studio 连接到数据库,一切看起来都很好。我更新了应用程序服务上的配置,因此它使用 azure secret 而不是我的开发环境 secret 。当从 Visual Studio 发布时,API 按预期工作,我可以访问 swagger ui,一切都很好。
转向 Azure DevOps。当我使用 Azure DevOps 的发布管道时,该管道会显示成功消息。但是,当我导航到 API(有一个简单的 MVC 登录页面 + swagger)时,它只有一个“应用程序错误:(”页面。我在 Azure 应用程序服务上找到了日志,它们有这个...
Ok 2022-03-01T21:44:43.8098649 \/ \/ \/
Ok 2022-03-01T21:44:43.8098677 A P P S E R V I C E O N L I N U X
Ok 2022-03-01T21:44:43.8098704
Ok 2022-03-01T21:44:43.809873 Documentation: http://aka.ms/webapp-linux
Ok 2022-03-01T21:44:43.8098757 Dotnet quickstart: https://aka.ms/dotnet-qs
Ok 2022-03-01T21:44:43.8098784 ASP .NETCore Version: 3.1.21
Ok 2022-03-01T21:44:43.809881 Note: Any data outside '/home' is not persisted
Ok 2022-03-01T21:44:44.3985103 Running oryx create-script -appPath /home/site/wwwroot -output /opt/startup/startup.sh -defaultAppFilePath /defaulthome/hostingstart/hostingstart.dll -bindPort 8080 -userStartupCommand 'dotnet TRMApi.dll'
Ok 2022-03-01T21:44:44.4498212 Cound not find build manifest file at '/home/site/wwwroot/oryx-manifest.toml'
Ok 2022-03-01T21:44:44.4499139 Could not find operation ID in manifest. Generating an operation id...
Ok 2022-03-01T21:44:44.4500119 Build Operation ID: 74cf02f2-a6c2-44a8-9077-95f1bab9d974
Ok 2022-03-01T21:44:45.5344493
Ok 2022-03-01T21:44:45.5358264 Agent extension
Ok 2022-03-01T21:44:45.5358438 Before if loop >> DotNet Runtime
Ok 2022-03-01T21:44:46.2152908 DotNet Runtime 3.1Writing output script to '/opt/startup/startup.sh'
Ok 2022-03-01T21:44:46.6953451 Running user provided startup command...
Ok 2022-03-01T21:44:46.7448258 It was not possible to find any installed .NET Core SDKs
Ok 2022-03-01T21:44:46.7453653 Did you mean to run .NET Core SDK commands? Install a .NET Core SDK from:
Ok 2022-03-01T21:44:46.7457829 https://aka.ms/dotnet-download
构建管道似乎正在按预期工作。它生成四个工件:一个用于 Web api 的文件夹,其中包含用于部署的 zip;一个用于数据库内容的文件夹(特别是带有 dacpac);以及一个用于前端的文件夹,其中也包含一个 zip 文件。不过,发布管道并未发布所有这些内容。我将包设置为 $(System.DefaultWorkingDirectory)/_Standard Continuous Integration Build/ApiDrop/TRMApi.zip
。
发布管 Prop 有以下设置:
- Azure 订阅:选择免费试用并进行身份验证
- 应用类型:Linux 上的 Web 应用
- 应用服务名称:从下拉列表中选择的 API 名称
- 启动命令:空白
代理工作
- 代理:Azure Pipelines
- 代理规范:windows-2019
- 工件下载:持续集成构建 > 选择所有工件
部署 Azure 应用服务步骤
- 任务版本:4.*
- 连接类型:Azure 资源管理器
- Azure 订阅:只读,由之前选择的应用服务预先填充
- 应用服务类型:也是只读、预填充
- 应用服务名称:也是只读的,已预填充
- 程序包或文件夹:$(System.DefaultWorkingDirectory)/_Standard Continuous Integration Build/ApiDrop/TRMApi.zip
- 运行时堆栈:3.1 (DOTNETCORE|3.1)
有什么提示或建议吗?我对此实在是摸不着头脑。我正在pluralsight 和 youtube 上观看视频,似乎这个过程对内容创建者来说“正好有效”,但我无法重复结果。
编辑:包括如何在发布管道中配置工件的屏幕截图。
最佳答案
FWIW,我在完全相同的代码库中遇到了完全相同的问题。 我还正确设置了构建管道工件。
我最初遇到了“无法找到任何已安装的 .NET Core SDK”消息。 我转到应用程序服务“高级工具”,然后使用 Bash 并发出命令:
dotnet --list-sdks
dotnet --list-runtimes
最初,它没有报告任何 SDK。 这导致我在管道的开头添加了一个额外的 Use.NET Core 管道任务,并使用以下参数
显示名称:
- 使用.NET代码sdk 3.1.415
要安装的包:
- SDK(包含运行时)
版本:
- 3.1.415
兼容的 Visual Studio 版本:
- 21.7.16
.Net core安装路径:
- $(Agent.ToolsDirectory)/dotnet
我选择的上述版本似乎与 Linux 机器上可用的版本相匹配。
但是,这似乎没有任何区别,因为它仍然失败并出现与您相同的错误。我确实想分享到目前为止我所尝试过的方法,但还不足以解决问题。
一时兴起,我启动了一个基于 Windows 的应用服务器(免费层)来部署。我修改了发布管道并添加了第二个“部署到应用程序服务”步骤。第二个部署到 Windows 应用服务。
完成此操作后,应用程序在第二个部署步骤后在 Windows 应用服务上成功运行,但在第一个部署步骤后无法在 Linux 应用服务上运行。
事实证明,该问题是由于构建管道问题造成的。 它使用 Visual Studio Build(即 MsBuild)项目步骤构建 API 项目。 为了针对 Linux,需要将其替换为 使用参数“-r linux-x64”加上适当的输出文件夹进行 dotnet 发布(或 dotnet 构建后发布)。
关于c# - 从 Azure DevOps 发布管道部署时,从 Visual Studio 发布的 ASP.NET Core 3.1 Web 应用程序不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71315662/