gpt4 book ai didi

tfs - 适用于多种环境的 NuGet 服务器?

转载 作者:行者123 更新时间:2023-12-02 08:23:57 28 4
gpt4 key购买 nike

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

  • 是否在功能上围绕通过多个环境(测试/Beta/生产)“推广”软件包的想法?
  • 我是否必须托管多台服务器(每个环境一台)?
  • 还有其他我没有想到的解决方案吗?

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

最佳答案

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

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

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

  • 生产存储库:Klondike NuGet server 的私有(private)实例它充当所有 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 服务器。

关于tfs - 适用于多种环境的 NuGet 服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34161517/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com