当前位置: 首页 > 知识库问答 >
问题:

ASP.NETCore 3.1从Visual Studio发布的Web应用在从Azure运营模式发布管道部署时不起作用

郭知
2023-03-14

我有一个完全工作的网页API,用点网核心3.1编写。我一直在关注蒂姆·科雷泰尔经理系列。该应用程序在生成时不会出现任何错误,并且在 Visual Studio 中运行时按预期方式工作。我有一个免费的 Azure 订阅。我在 linux 上设置了一个 F1 免费 Web 应用服务和两个基本 SQL Server 数据库,它们都位于同一资源组中,并将防火墙设置为允许访问其他 Azure 服务进行连接。我可以发布网络 API 和数据库。我可以使用 Azure 数据工作室连接到数据库,一切看起来都很好。我更新了应用服务上的配置,使其使用 azure 机密,而不是我的开发环境机密。从视觉工作室发布时,API按预期工作,我可以得到摇摆的ui,生活很好。

去Azure DevOps。当我使用Azure DevOps的发布管道时,管道给出了成功消息。然而,当我导航到API(有一个简单的MVC登录页面)时,它只有一个“应用程序错误:(”页面。我在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文件。不过,发布管道并未发布所有这些内容。我将软件包设置为 $(系统.默认工作目录)/_Standard持续集成构建/apiDrop/TRMApi.zip

发布管道具有以下设置:

    < li>Azure订阅:选择了免费试用并对其进行了身份验证 < li >应用程序类型:Linux上的Web应用程序 < li >应用服务名称:从下拉列表中选择的api名称 < li >启动命令:空白

代理工作

  • Agent: Azure Pipelines
  • 代理规格:视窗-2019
  • 工件下载:持续集成构建

部署Azure应用服务步骤

  • 任务版本:4.*
  • 连接类型:Azure 资源管理器
  • Azure 子规则:只读,由应用服务选择提前预填充
  • 应用服务类型:也是只读的,预填充的
  • 应用服务名称:也是只读的,预填充
  • 包或文件夹:$(html" target="_blank">系统.默认工作目录)/_Standard持续集成构建/Api滴/TRMApi.zip
  • 运行时堆栈: 3.1 (点网核心|3.1)

有什么建议吗?这件事真让我头疼。我正在看pluralsight和youtube上的视频,这个过程似乎对内容创建者来说“很有效”,但我无法重复结果。

编辑:包括如何在发布管道中配置工件的屏幕截图。

共有2个答案

年光明
2023-03-14

生成管道和发布管道不使用相同的系统默认工作目录。所以我认为您的发布管道可能没有在构建管道中获得工件。

有一种简单的方法可以将生成管道中生成的项目传递给发布管道:

  1. 在构建管道中,使用发布构建工件任务或发布管道工件任务来发布您的工件
  2. 在您的发布管道中,单击“添加工件”。然后选择“Build”作为源类型,并填写有关您的构建的信息。请注意“源别名”的值,您需要将其用作发布管道中工件的名称
易元青
2023-03-14

FWIW,我从完全相同的代码库中遇到完全相同的问题。我还正确设置了生成管道项目。

最初,我听到一条消息“找不到任何已安装的.NET Core SDK”。我转到应用程序服务“高级工具”,然后使用Bash并发出命令:

dotnet --list-sdks
dotnet --list-runtimes

最初,它没有报告任何sdk。这导致我在管道的开头添加了一个额外的Use.NET核心管道任务,参数如下

显示名称:

  • 使用。NET代码sdk 3.1.415

要安装的软件包:

    < li>SDK(包含运行时)

版本:

  • 3.1.415

兼容的Visual Studio版本:

    21年7月16日

安装.Net核心的路径:

    < li>$(代理。工具目录)/点网

我选择了上面的版本,这些版本似乎与linux盒子上报告的版本相匹配。

但是,这些似乎都没有任何区别,因为它仍然会失败,并出现与您相同的错误。我确实想分享我迄今为止尝试过的东西,但还不足以解决它。

一时兴起,我启动了一个基于 Windows 的应用服务器(免费层)来部署。我修改了发布管道,并添加了第二个“部署到应用服务”步骤。第二个部署到 Windows 应用服务。

执行此操作后,应用在第二个部署步骤后在 Windows 应用服务上成功运行,但在第一个部署步骤之后不会在 Linux 应用服务上运行。

原来这个问题是由构建管道问题引起的。它使用Visual Studio Build(即MsBuild)项目步骤构建API项目。为了以linux为目标,需要用带有参数“-r linux-x64”和适当的输出文件夹的dotnet publish(或者dotnet build后跟publish)来替换它。

 类似资料:
  • 尝试让在prem上安装了部署代理的Azure DevOps发布管道以有权访问on-prem数据库的特定用户身份运行控制台应用程序。 这就是工作流程 Azure发布管道调用- 我正在使用管道中的PowerShell任务与此内联脚本: 我知道userid、密码和命令行参数正在正确传递,但是无论控制台应用程序有多简单,当代理运行PowerShell脚本时,它都会崩溃。我尝试在各种服务帐户(系统、管理员等

  • 我正在尝试在Azure DevOps(内部部署)中配置发布管道以支持git流策略。我正在努力实现的目标: promise“发布/*”触发软件的构建并发布到QA的位置 promise“主控”从步骤1获取相同的软件构建(工件),并发布到生产位置 因此,当我做一个git-flow开始发布时,软件可用于测试/质量保证,当我完成发布时,它可供用户使用。 我的构建管道工作正常,它由发布分支触发,并以发布工件任

  • 我正在尝试部署一个现有的。Net核心应用程序,通过创建构建和发布管道来使用Azure Devops。构建管道工作正常,但我在运行发布管道(在部署Azure App Service下)时收到以下错误。 错误:未找到具有指定模式的包:D:\a\r1\a***. zip 检查任务中提到的包是作为构建中的工件发布还是作为前一阶段发布并在当前作业中下载。 应该做些什么来解决这个问题?

  • 我试图在Azure运营模式发布管道上创建Click一旦部署我创建签名,清单,应用程序,部署文件与证书但是我如何创建exe和安装文件(通过Azure运营模式发布管道)

  • 我有一个Java应用程序,可以使用Azure扩展从Eclipse部署到Tomcat8应用程序服务。 我创建了一个构建管道,该管道使用创建工件。战争档案。 然后,我创建了一个发布管道,并设置了一个“将WAR部署到Azure应用程序服务”。管道部署war文件并将其展开,但其他一些配置不正确,因为该应用程序在Tomcat服务器上不可用。 是否有人使用此任务成功部署到Tomcat 8应用程序服务?如果是这

  • 我试图配置一个Azure逻辑应用与Azure Devops连接器,将创建一个新的管道版本 管道需要两个变量,系统和范围: 如何在logic app中配置名称和值?,我试过了,但没用: 如何将这些变量传递到Azure运营模式中的发布管道?