3

我正在考虑为私人提要设置 NuGet 服务器,这似乎很容易(有分步指南)。我预见的问题是它看起来不像是为支持多种环境而设计的。

  • 通过多种环境(测试/测试版/生产)“提升”包的想法是否有内置的功能?
  • 我是否必须托管多台服务器(每个环境一台)?
  • 还有另一种我没有想到的解决方案吗?

我主要担心的是我们更新了一个包并将其用于我们的测试环境,但我们不希望我们的测试版或生产环境在它有问题时失败......我们希望等到更新被“批准”之前可用于 Beta,然后经过第二次批准以使其可用于生产。

4

1 回答 1

9

在我目前的工作场所,我们也有类似的问题。在不稳定分支中开发的 NuGet 包应该可用于在我们产品的 Alpha 版本上完成的开发,但不适用于我们产品的 Beta / RTM 版本。因此,为了实现这一点,我们设置了 3 个不同的 NuGet 存储库:

  • 开发存储库:所有开发人员都具有只读访问权限的文件共享。文件共享有一个用于 NuGet 包的空间和一个用于匹配 NuGet 符号包的空间。只有构建服务器(和构建工程师)才能访问此存储库。

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

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

作为分支策略,我们使用GitFlow。使用此策略允许我们使用以下方法:

  • 在分支上完成的构建feature将其 NuGet 包推送到开发存储库。
  • 在其上完成的构建hotfixrelease分支将其 NuGet 包推送到 QA 存储库
  • 鉴于这些分支仅获得合并提交,因此不会在developor分支上进行编译构建。master

可以将包引入生产存储库的唯一方法是从 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 服务器。
于 2015-12-08T20:28:48.237 回答