多环境NuGet服务器?

3
我正在研究为私有源建立NuGet服务器,这似乎很容易(有一份逐步指南)。我预见到的问题是它似乎不支持多个环境。
  • 是否内置了“推广”软件包通过多个环境(测试/ Beta /生产)的功能?
  • 我必须托管多个服务器(每个环境一个)吗?
  • 还有其他解决方案我没有想到的吗?

我的主要关注点是我们更新软件包并在测试环境中使用它,但如果出现错误,我们不希望beta或生产环境失败...我们希望等待更新“获得批准”,然后才能使其可用于Beta,并进行第二次批准以使其可用于生产。

2
为什么不直接对软件包进行版本控制呢? - Isaiah4110
1个回答

10
在我目前的工作场所,我们也存在类似的问题。正在不稳定分支开发中的NuGet包应该对我们产品的Alpha版本开发可用,但不适用于Beta/RTM版本。因此,为了实现这一点,我们设置了三个不同的NuGet存储库:
  • 开发存储库:所有开发人员都具有只读访问权限的文件共享。该文件共享有一个NuGet包的空间和一个匹配的NuGet符号包的空间。只有构建服务器(以及构建工程师)才有对此存储库的写入权限。

  • QA存储库:类似于开发存储库的另一个文件共享。

  • 生产存储库:Klondike NuGet server的私有实例,用作NuGet和符号服务器,为所有允许在生产构建中使用的NuGet包(及其源代码)提供服务。

我们使用GitFlow作为分支策略。使用这种策略使我们能够采用以下方法:

  • feature分支上完成的构建将其NuGet包推送到开发存储库。
  • hotfixrelease分支上完成的构建将其NuGet包推送到QA存储库。
  • developmaster分支上不进行编译构建,因为这些分支只获取合并提交。

唯一将软件包引入生产存储库的方法是从QA存储库晋升。为了实现这一点,每个产品存储库都有一个指向master分支的构建。当新的合并提交被推送到此分支时,构建会执行以下步骤:

  1. 获取新版本的代码
  2. 通过获取应用于新版本的版本号标签来确定该版本的版本号
  3. 通过搜索 nuspec 文件并从这些文件中获取包名称来确定哪些 NuGet 包已从新版本发布。
  4. 包名称和版本号的组合给出完整的包文件名。
  5. 查找 QA 存储库中的包,并将它们推送到生产存储库。还要查找符号包并将其推送到生产符号服务器。最后从 QA 存储库中删除包。

显然,此工作流程可以扩展到包括开发存储库,但到目前为止,我们还没有看到这方面的需求。

请注意,如果您想以这种方式推广包,那么很重要的一点是,向 QA 存储库提供生成包时必须使用最终版本号(例如 1.2.3)而不是预发布版本号(例如 1.2.3-alpha0001),否则推广构建无法确定正确的包。

这种方法的一个附带好处是,当将代码推送到生产分支时,开发人员不必更改其项目文件,因为项目文件已引用了正确的 NuGet 包版本。

回答您的问题:

  • NuGet 没有关于软件包推广的内置功能。但是,建立一个允许您处理软件包推广的系统并不难。此外,还有一些商业 NuGet 服务器提供了推广功能。
  • 您可以托管多个服务器,但这并不总是必要的。NuGet 还可以将文件共享用作存储库,因此您可以在测试 / beta 环境中使用文件共享,然后在生产环境中使用适当的 NuGet 服务器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接