【问题标题】:Is it possible to create a cache of nuget packages for computers without internet?是否可以为没有互联网的计算机创建 nuget 包的缓存?
【发布时间】:2018-12-10 11:58:23
【问题描述】:

我们有一个构建服务器,它无法访问互联网。它从 git 服务器获取我们的源代码,然后尝试构建它们。

目前,它(显然)失败了,因为这台计算机无法访问互联网。我和 IT 讨论过,他们同意让我们将它连接到互联网进行一些维护,但他们一直拒绝让它连接。

我的问题是:

是否可以创建某种本地 nuget 缓存,当我们对包进行更改时可以填充它,然后构建服务器会在连接到服务器之前尝试使用此缓存?

【问题讨论】:

  • 我的回答有帮助吗?

标签: nuget nuget-package nuget-package-restore


【解决方案1】:

我能想到几个解决方案。

下载解决方案使用的包

我最近answered a very similar question,询问的人想要获取包以在离线计算机上使用。我对另一个问题的回答的摘要是您创建一个 nuget.config 将全局包文件夹设置为当前为空的文件夹,进行还原,然后将所有 .nupkg 文件复制到您的目的地。 NuGet 支持本地文件夹提要,因此只需将这些 nupkg 放在网络共享上,并告诉您的构建服务器将该网络共享用作 nuget 源。

一个明显的问题是,每次任何开发人员安装新包(或现有包的新版本)时,都需要将新包复制到您的本地提要。

在本地镜像 nuget.org 的包

我的队友有一个工具,它将使用NuGet's v3 catalog api 查找所有未删除的包(可选地过滤掉未列出的包)并在本地下载所有 1.4 到 180 万个包。他们的实施大约需要一周时间才能完成所有内容的下载。出于兴趣,我写了一些东西,使用 Azure Functions 来自动缩放作业,并设法在 2 小时内下载了所有包。 Blob 存储帐户现在是 2.4 TiB,因此您几乎肯定不想这样做,除非您这样做是为了分析 nuget.org 上的包,而不是将其用作恢复包的源。您可能希望定期更新您的本地提要。

使用只读缓存服务器

由于您的构建服务器是网络连接的,因此请与您的 IT 部门合作以获得一个直读缓存服务器。如果您的公司已经使用 HTTP 代理,请与您的 IT 部门合作,允许您的构建服务器使用它,然后将其配置为 HTTP 代理。

如果您的公司没有 HTTP 代理,您可以在公司中安装多个 nuget servers。其中一些支持直读缓存,因此让您的 IT 部门在公司 DMZ 中设置它,您的构建服务器可以使用它从 Internet 上的提要中获取包。

【讨论】:

  • 1) 是我们能做的最接近的,我们会看看,谢谢!
  • 您能分享一下您是如何实现下载所有 nuget 包的吗?
  • 编写代码以读取 nuget.org 的“目录”(事件日志)以查找每个包的列表,将每个包写入队列并使用具有自动缩放功能的 Azure Functions 下载并保存每个 url在队列中。 This blog post 更详细地介绍了他们如何做类似的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-12
  • 1970-01-01
  • 2020-09-26
  • 2021-08-17
  • 1970-01-01
相关资源
最近更新 更多