NuGet Enterprise - 不同成熟度级别包的最佳实践

2024-01-12

我们希望使用 NuGet 在我们组织中的开发人员之间共享程序集。我们目前正在考虑设置三个 NuGet 源,如下所示:

  • 释放馈送:程序集的稳定发布质量版本。
  • QA-feed:在主分支(我们的集成分支)中构建的程序集。
  • 开发源:在任何功能分支中构建的程序集(共享进度)。

开发人员计算机上的本地构建不应发送到任何这些源。只有构建服务器完成的构建才会执行这些操作。我们的构建服务器执行三种不同类型的构建,具体取决于分支、开发、QA 和发布分支。其中每一个都具有相应的构建配置,可在源更改时触发。在构建时,它们每个人都会将构建的 assembly-nuget-packages 推送到相应的 feed。开发版本将在版本中添加“-dev”。 QA 版本将在版本中添加“-qa”,而发布版本将具有“纯”版本号。


现在,问题:

  1. 开发人员控制使用哪些软件包的最佳解决方案是什么?


在我看来,您建议的流程对于您现在的团队规模和未来一年的团队规模来说都过于复杂。

我明白你的原因think您需要三个单独的提要(开发、质量保证、发布),但我预测这将在一年内让您感到痛苦。我希望您希望在软件包从开发到质量检查再到发布的过程中增强对软件包稳定性/质量的信心——这是一个完全合理的要求。然而,单独的分支机构,特别是单独的builds许多人认为 Dev、QA 和 Release 是一种反模式。具体来说,在这本开创性的书中持续交付作者:谦卑和法利 http://continuousdelivery.com/,强烈建议仅使用一个代码库来进行构建,并且any如果测试通过,这些构建应该能够升级到生产:“仅构建代码一次”是关键。

我建议您:而不是您概述的模式:

  1. 使用 CI 工具来建模部署管道 http://www.informit.com/articles/article.aspx?p=1621865:Jenkins、TeamCity、TW GO 等。这为将工件直接从初始 CI 构建一直流向生产而无需重新构建奠定了良好的先例
  2. 使用语义版本控制(称为SemVer http://semver.org/在 .NET 世界中),以保护包使用者免受重大更改的影响,并向其他团队传达包更改的性质。
  3. 使用版本范围约束packages.config这样构建就不会被新的主要版本的软件包破坏(带有重大更改)
  4. 让开发团队负责从代码提交到生产的特定包 - 如果他们维护的包之一出现问题,他们需要快速提供修复,以便其他团队不会受到阻碍。团队还需要纪律,以确保他们通过 SemVer 传达包更改的性质(这是重大更改?新功能?错误修复?)
  5. 如果您认为有必要,请使用 NuGet 的预发布功能从下游构建和测试中“隐藏”新的包版本。这可能允许开发团队更有效地进行更改,但如果您使用允许快速制作和交付新包版本的部署管道,则可能没有必要。

简而言之,只需构建一次源代码,并设置自动化,以便可以使用部署管道快速推出对现有包的任何修复。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NuGet Enterprise - 不同成熟度级别包的最佳实践 的相关文章

  • 从 BitmapImage 获取支持的图像格式

    如何获取 System Windows Media Imaging BitmapImage 支持的图像格式列表 我正在用 C WPF 编写一个简单的图像处理工具 BitmapImage 类是更有用的位图类之一 因为它能够从多种格式进行解码
  • 当客户端连接到“localhost”上的服务时,为什么 System.Net.ServicePoint.ConnectionLimit 使用“7FFFFFFF”(Int32.MaxValue/2147483647)?

    为什么使用 System Net ServicePoint ConnectionLimit 7FFFFFFF Int32 MaxValue 2147483647 当客户端连接到服务时 本地主机 而如果服务在远程计算机上运行 它决定使用 2
  • 当视图模型类型为包含超过 4 个项目的元组时,Asp.net mvc 2 .net 4.0 出现错误

    当我在 Asp net mvc 2 net 4 0 中使用模型类型 Tuple 创建强类型视图时 当 Tuple 具有超过 4 个项目时 我会收到错误 示例1 视图类型是Tuple
  • 命名空间“System.Runtime”中不存在类型或命名空间名称“Caching”

    我知道通常有一个简单的解决方案 即在添加引用中引用 dll 但我已经添加了引用 并且 system runtime caching 出现在我的引用列表中 但错误仍然显示 该错误在运行时显示在浏览器中 因此可以编译 我已删除并重新添加了引用
  • 使用“new()”和“.StartNew()”创建新实例有什么区别?

    来自我对问题的 回答 任务中的秒表似乎在所有任务中都是累加的 只想测量任务间隔 https stackoverflow com a 16259019 200449 创建新的项目之间可能存在哪些差异跑表 http msdn microsoft
  • 如何将当前应用程序域的程序集动态加载到c#项目中?

    我正在尝试加载第三方assemblies 动态地到项目并使用reflection创建其类型的实例 I used Assembly LoadFrom Assembly1 dll Assembly LoadFrom Assembly2 dll
  • 从异步方法同步调用 CPU 密集型方法的混乱

    我正在尝试 NET 4 5 的 async await 结构 我正在开发 RESTful Web API 解决方案 我试图弄清楚如何处理 CPU 绑定操作 1 从当前线程同步调用它 或 2 使用Task Run 让我们使用这个例子page
  • 带有嵌入 Flash 视频的 PDF 示例?

    有谁知道我在哪里可以查看嵌入 Flash 视频的 PDF 示例 我知道问这个问题很愚蠢 因为你会认为任何面向技术的用户都应该能够使用谷歌找到一个 但我真的找不到 我的另一个问题是 使用 C 中的 API 将 Flash 视频嵌入 PDF 文
  • 通过命令行参数更改默认的 ant 目标

    最近我被分配了一个任务 让ant能够为不同的环境构建war包 除了一项功能外 我几乎完成了 蚂蚁接受一个env参数类似 Denv DEV 并使用不同的配置文件来制作war包 但默认目标是start它将构建 部署并启动 tomcat 我不希望
  • 使用生成的 Golang DLL 返回字符串或 *C.Char

    我一直在努力追随z505 goDLL https github com z505 goDLL回购并遇到了一个大问题 该方法无法返回字符串 我无法读取结果的输出变量 这是我到目前为止使用的代码 Go 完整代码https play golang
  • 将集合项复制到 .NET 中的另一个集合

    在 NET VB 中 如何获取一个集合中的所有项目 并将它们添加到第二个集合中 而不丢失第二个集合中预先存在的项目 我正在寻找比这更有效的东西 For Each item As Host In hostCollection1 hostCol
  • SingleOrDefault异常处理

    我有一个示例代码 它调用 SingleOrDefault 方法 3 次 并在任何序列具有多个匹配元素时记录异常 如果我想检查这段代码的哪一部分抛出异常 问题就开始了 是否可以从此异常中获取一些有用的信息 例如谓词参数或集合类型以进行更详细的
  • 使用 TCP 时是否需要使用校验和来保护我的消息?

    使用 TCP 作为网络协议 在通过线路发送消息之前 我会为每条消息的大小 以及可能的校验和 添加前缀 我想知道 计算和传输消息的校验和是否有意义 以确保消息将被不变地传递 如果以及何时传递 例如因为一些网络错误 目前 我在发送消息本身之前发
  • 如何让CQRS适应项目? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我发现了一个新术语 名叫CQRS 命令查询职责分离 http martinfowler com bliki CQRS html其中指出 概念模型
  • 160 位 SHA1 哈希值的前 32 位是否可以替代 CRC32 哈希值?

    我正在开发一个 NET 3 5 项目 我需要一个 32 位哈希值 NET 加密类中似乎没有任何方法返回 32 位哈希 MD5 是 128 位 SHA1 是 160 位等 我实现了一个 CRC32 类 但我发现现有的 SHA1 和 MD5 哈
  • ROWNUM 的 OracleType 是什么

    我试图参数化所有现有的 sql 但以下代码给了我一个问题 command CommandText String Format SELECT FROM 0 WHERE ROWNUM lt maxRecords command CommandT
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • *.tlb 文件在运行时使用过吗?

    我正在开发一个通过 COM 互操作公开一些 NET API 的产品 作为构建的一部分 我们为所有此类程序集生成 tlb 文件 并将它们作为单独 SDK 包的一部分提供 我们的客户可以在我们的产品之上安装 SDK 并创建使用我们的 COM A
  • 如何在.NET Core上直接调用F#编译器?

    UPD 我想直接从 NET Core SDK 调用 F 编译器 即 fsc 我了解 dotnet build co 但当我只需要编译一个简单的问题时 即 fsc file fs 就足够的情况下 我不想涉及它们 我尝试在 NET Core S

随机推荐