【问题标题】:dotnet restore takes too long on VSTSdotnet restore 在 VSTS 上花费的时间太长
【发布时间】:2018-04-09 03:24:27
【问题描述】:

我有 asp.net core 2.0 应用,它引用了 Microsoft.AspNetCore.All 元数据包

<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />

我在 VSTS 中有以下构建,我使用托管构建代理构建。

为什么恢复软件包总是需要至少 95 秒?我以为

  1. Microsoft.AspNetCore.All 包缓存在“.NET Core 运行时存储”中,因此不必恢复它们。
  2. 当我恢复一次包时,不必在每次构建中都再次恢复它们,因为它们已被缓存。

为什么 VSTS 中的 dotnet restore 这么慢?

编辑:投票支持更好的 VSTS 构建性能:https://visualstudio.uservoice.com/forums/330519-visual-studio-team-services/suggestions/32044321-improve-hosted-build-agent-performance

【问题讨论】:

  • 您使用的是托管代理还是私有代理?托管代理始终来自新的虚拟机,因此不会发生缓存。
  • 像往常一样,答案是花钱解决问题。托管的构建代理很好,因为它们不需要任何配置并且是免费提供的。但是,如果构建时间很关键,那么您应该考虑创建自己的专用构建服务器,您可以根据需要(或负担得起)尽可能地制作它。否则,拿走你得到的并快乐。
  • @DanielMann:我提到的托管代理。
  • @ChrisPratt:钱不是问题。时间就是问题,我必须管理的专用构建服务器是浪费时间。只要服务能节省我的时间,我就没有问题。
  • 我想更好的问题是,为什么不缓存“Microsoft.AspNetCore.All”之类的常见内容?这应该很常见。这开始需要几分钟才能恢复。通过缓存它,它实际上应该减少 VSTS 团队内部的 VM 成本负载。

标签: asp.net-core nuget .net-core azure-devops azure-pipelines


【解决方案1】:

来自Hosted Agents 上的 Microsoft Docs:

功能和限制

托管代理:

  • 作为服务运行。
  • 有以上软件。您还可以使用我们的工具安装程序添加软件。
  • 提供 10GB 的存储空间。

托管代理不提供:

  • 交互模式。
  • 管理员权限。
  • 能够登录。
  • 能够将工件拖放到 UNC 文件共享中。
  • 能够运行 XAML 构建。
  • 使用私有代理可能会获得潜在的性能优势,这些代理可以更快地启动和处理构建。 Learn more

如果我们的托管代理不能满足您的需求,您可以deploy your own private agents

长短,使用托管代理,所得到的就是所得到的。如果它对您来说不够快或者没有做您想做的其他事情(例如缓存 NuGet 包),那么您的办法是创建自己的私有构建代理。

【讨论】:

  • 如果托管代理不够快,请在此处投票 :) visualstudio.uservoice.com/forums/… 托管代理中的性能也没有理由无法升级。
  • ...或抱怨用户声音;)
  • 该用户语音不再存在。消灭 Connect 的数字图书燃烧的另一个受害者
【解决方案2】:

NuGet 包本身的下载速度很快,实际启动后就是这样。

如果您查看日志,该任务会花费大约 1 分钟(在每个构建中有所不同)什么都不做。

从我的最后一篇日志来看,50 秒什么都不做:

...
2018-02-04T09:51:47.1349027Z [command]d:\a\_tool\NuGet\4.3.0\x64\nuget.exe restore d:\a\1\s\MySolution.sln -Verbosity Detailed -NonInteractive -ConfigFile d:\a\1\Nuget\tempNuGet_84.config
2018-02-04T09:52:37.2580691Z NuGet Version: 4.3.0.4406
...

【讨论】:

  • 我在日志中的这两行之间实际上花费了将近 2 分钟(115 秒)。我提出了一个问题:developercommunity.visualstudio.com/content/problem/209179/…
  • 我有一个 Xamarin Android 项目,等待大约 4 分钟。有趣的是,在预览版 macOS 代理上构建 Xamarin iOS 项目非常快,nuget 恢复没有延迟,而且每项任务似乎都运行得更快。
  • 对我来说是 4 分钟。您使用的是自定义 Nuget.config 吗? (我和缓慢的构建是在我切换到自定义配置时开始的 - 但我现在不确定是否相关。需要检查)。
  • 如果你仔细观察,它会运行 50 秒,然后一次性将整个 shell 输出刷新到日志中。没有办法确切地说明恢复的哪个部分很慢,但我会把钱放在 nuget.org 的网络流量上。
【解决方案3】:

尝试使用解决方案文件而不是 **/*.csproj。对我来说,虽然恢复 **/*.csproj 大约需要 2 分钟,但恢复解决方案文件只需要 10 秒

【讨论】:

  • 为构建所有项目的 repo 提供单一解决方案并使用通配符(以允许 sln 重命名)是构建任务的一般建议。我还要补充一点,使用dotnet 任务而不是旧的nuget restoremsbuildVS Test 任务对于相同的解决方案和项目具有更长的执行时间。有时它长 5%,有时 25%,没有押韵或理由。我没有从 120 秒缩短到 10 秒,除非我使用自己的构建服务器并且已经完成了诸如清理输出文件夹但没有清理源和包等操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多