是否可以为没有互联网的计算机创建 nuget 包缓存?

Is it possible to create a cache of nuget packages for computers without internet?

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

目前,它失败了(很明显),因为这台电脑没有互联网接入。我和IT商量过,他们同意让我们连网做一些维护,但是他们不让一直连着。

我的问题是:

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

我能想到几种解决方案。

下载解决方案使用的包

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