如何使 Nuget 恢复工作更快?

Rıf*_*hin 15 nuget nuget-package nuget-package-restore azure-devops azure-artifacts

我们正在使用VSTS托管构建服务器构建 CD 管道。恢复Nuget需要3分钟以上。这时间太长了。

我怎样才能让它运行得更快?我们可以使用任何类型的缓存系统吗?

jes*_*ing 7

更新:缓存现在普遍可用(文档

缓存目前在功能管道中,日期待定。同时,您可以使用上传管道工件/下载管道工件任务将结果存储在您的 Azure DevOps 帐户中以加快/下载。

可以在此处跟踪进行中工作

同时,Microsoft 1ES(一个工程系统,内部组织)发布了他们的内部解决方案,该解决方案使用通用包在您的 Azure DevOps 帐户中存储任意包。它非常快,因为它可以同步以前包之间的增量。有一个关于如何配置 Azure Pipeline 以将 NuGet 包缓存存储在源目录中以便任务缓存它们的示例

variables:
  NUGET_PACKAGES: $(Build.SourcesDirectory)/packages
  keyfile: '**/*.csproj, **/packages.config, salt.txt'
  vstsFeed: 'feed name'

steps:
- task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCache@1
  displayName: 'Restore artifact'
  inputs:
    keyfile: $(keyfile)
    targetfolder: $(NUGET_PACKAGES)
    vstsFeed: $(vstsFeed)
Run Code Online (Sandbox Code Playgroud)

  • 这不是问题,因为对于一小部分较大的文件来说它仍然很慢,甚至与数据中心外的 CDN 下载相比通常也很慢。此外,Gradle Enterprise 等工具表明您可以有效地缓存大量小文件。但是,是的,缓存绝对应该基于本地磁盘,设计审查的公众评论中提出,基于网络的缓存速度太慢,以至于几乎没有用处,而且确实如此。我不确定其他 CI/CD 提供商是否尝试过基于网络的缓存。 (3认同)
  • 不幸的是,新缓存的恢复速度非常慢,通常比直接重新下载依赖项还要慢。 (2认同)