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



我们想使用nuget在组织中的开发人员中共享组件。我们目前正在考虑设置三个Nuget feed,例如:

  • 释放 - 馈线:稳定的组件版本版本。
  • QA-FEED:构建的主体(我们的Integration Branch)内的组件。
  • 开发喂养:在任何特征分支(共享进度)中构建的组件。

在开发人员的机器上不应将本地构建发送到这些提要中的任何一个。只有构建服务器所做的构建才能执行这些操作。我们的构建服务器执行三种不同类型的构建,具体取决于分支,开发,质量保证和释放分支。这些中的每一个都带有相应的构建配置,这些构建对源更改触发。在构建上,每个人都会将构建的组装弹件包装推向其相应的供稿。开发构建将在版本中添加" -dev"。QA构建将在版本中添加" -QA",而发行版构建将具有"纯"版本号。


现在,问题:

  1. dev控制要使用哪些软件包的最佳解决方案是什么? 我猜想手动必须手动编辑依赖关系源才能显式param定义哪些源以获取组件:有时您需要发布组件,有时是QA组件,有时甚至想要出血的边缘开发版本。

  2. 我们还在考虑将本地构建软件包推向每个开发人员自己的机器上的本地私人供稿,以帮助加速构建。在哪个feed(s)中会出现问题?

  3. 如果这些定义是由DEV在依赖项文件中制定的(这也必须受到版本的控制),那么当源用于库存时,将将设置放入开发供稿中(相同的焦点作为开发人员建立,只是与他人共享)。这可能对开发供稿而不是正确的事情?

  4. 随后将源合并为QA分支时,依赖项中定义的提要仍然是DEV制造的,可能会从开发供稿中获取组件。对于质量检查构建,我认为这可能不是我们想要的。质量检查构建可能只能限制供稿以释放组件,因为您想查看更改是否按照发布组件的预期工作。您不想使用其他"未经测试"的QA组件进行测试。这对他人也很有意义吗?

  5. 在版本分支中,发行版构建应仅使用发布提要组件,我猜?也许根本不是一个问题:)。


所以,要总结所建议的过程...在构建过程中,我们要:

  • 遵循开发人员在本地和开发构建的依赖性规范中设置的资源。
  • 进行质量检查和释放时,应限于发行供稿。

作为旁注,QA馈送实际上不会由任何其他构建使用。但是,QA部门将使用它们,因为它们将使用这些用于测试。

在我看来,您建议的过程太复杂了,无论是现在还是团队的规模,团队的规模都提前一年。

我理解您 Think 您需要三个单独的供稿(DEV,QA,发行)的原因,但是我预计这会在一年的时间内对您感到痛苦。我希望您想提高对包装从开发人员发展到质量检查到释放包装的稳定性/质量的信心 - 这是一个完全合理的要求。但是,许多人认为分支机构,尤其是单独的构建 被许多人认为是反图案。具体而言,在Humble and Farley的开创性书籍连续交付中,强烈建议只有一个代码库,这些构建构建的任何都应该是如果测试通过:"仅构建代码一次"是关键。

而不是您概述的图案,我建议您:

  1. 使用CI工具,该工具允许您建模A 部署管道:Jenkins,Teamcity,TW GO等。这为直接从初始CI构建而直接流动的伪像的良好先例为止。没有重建的生产
  2. 使用语义版本控制(在.NET世界中称为SEMVER)来保护包装消费者免于破坏变化,并将包装更改的性质传达给其他团队。
  3. 使用packages.config中的版本范围约束,以免由新的主要版本的软件包(带有破坏更改)破坏构建
  4. 使开发团队负责从代码提交生产的特定软件包 - 如果他们维护的一个包裹有问题,则需要迅速提供解决方案,以使其他团队不会被阻止。团队还需要纪律以确保他们通过SEMVER传达包装更改的性质(这是一个破坏的变化?新功能?一个错误修复吗?)
  5. 如果您认为有必要,请使用Nuget的预发行功能来"隐藏"下游构建和测试中的新软件包版本。这可能允许开发团队更有效地进行更改,但是如果您使用允许迅速制作和交付新包装版本的部署管道,则可能不是必需的。

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

最新更新