我正在考虑为私人提要设置 NuGet 服务器,这似乎很容易(有分步指南)。我预见的问题是它看起来不像是为支持多种环境而设计的。
- 通过多种环境(测试/测试版/生产)“提升”包的想法是否有内置的功能?
- 我是否必须托管多台服务器(每个环境一台)?
- 还有另一种我没有想到的解决方案吗?
我主要担心的是我们更新了一个包并将其用于我们的测试环境,但我们不希望我们的测试版或生产环境在它有问题时失败......我们希望等到更新被“批准”之前可用于 Beta,然后经过第二次批准以使其可用于生产。
我正在考虑为私人提要设置 NuGet 服务器,这似乎很容易(有分步指南)。我预见的问题是它看起来不像是为支持多种环境而设计的。
我主要担心的是我们更新了一个包并将其用于我们的测试环境,但我们不希望我们的测试版或生产环境在它有问题时失败......我们希望等到更新被“批准”之前可用于 Beta,然后经过第二次批准以使其可用于生产。
在我目前的工作场所,我们也有类似的问题。在不稳定分支中开发的 NuGet 包应该可用于在我们产品的 Alpha 版本上完成的开发,但不适用于我们产品的 Beta / RTM 版本。因此,为了实现这一点,我们设置了 3 个不同的 NuGet 存储库:
开发存储库:所有开发人员都具有只读访问权限的文件共享。文件共享有一个用于 NuGet 包的空间和一个用于匹配 NuGet 符号包的空间。只有构建服务器(和构建工程师)才能访问此存储库。
QA 存储库:另一个类似于开发存储库的文件共享。
生产存储库: Klondike NuGet 服务器的私有实例,用作允许在生产构建中使用的所有 NuGet 包(及其源)的 NuGet 和符号服务器。
作为分支策略,我们使用GitFlow。使用此策略允许我们使用以下方法:
feature
将其 NuGet 包推送到开发存储库。hotfix
或release
分支将其 NuGet 包推送到 QA 存储库develop
or分支上进行编译构建。master
可以将包引入生产存储库的唯一方法是从 QA 存储库进行升级。为了实现这一点,每个产品存储库都有一个指向master
分支的构建。当一个新的合并提交被推送到这个分支时,构建会执行以下步骤:
nuspec
通过搜索文件并从这些文件中获取包名称,确定哪些 NuGet 包已从新修订版中发布。这个工作流程显然也可以扩展到包括开发存储库,但到目前为止我们还没有看到需要这样做。
请注意,如果您想以这种方式推广包,重要的是提供给 QA 存储库的构建会生成带有最终版本号(例如 1.2.3)而不是预发布版本号(例如 1.2.3-alpha0001)的包否则促销构建无法确定要抓取的正确包。
这种方法的一个附带好处是,当他们的代码被推送到生产分支时,开发人员不必更改他们的项目文件,因为项目文件已经引用了正确的 NuGet 包版本。
所以回答你的问题: