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