我们希望使用NuGet在我们组织的开发人员之间共享程序集。我们目前正在考虑设置三个NuGet源,如下所示:
本地构建于开发人员之上。不应将机器发送到任何这些Feed。只有构建服务器完成的构建才能执行这些操作。我们的构建服务器执行三种不同类型的构建,具体取决于分支,Development,QA和Release分支。其中每个都具有相应的构建配置,可在源更改时触发。在构建时,每个构建器都会将构建的组件 - nuget-packages推送到相应的feed。 Development-builds将添加" -dev"到版本。 QA版本将添加" -qa"到版本,而发布版本将有一个"纯"版本号。
现在,问题:
开发人员控制使用哪些软件包的最佳解决方案是什么? 我想开发人员必须手动编辑依赖关系源参数来明确定义从哪个Feed获取程序集:有时您需要发布程序集,有时需要QA程序集,有时您甚至需要前沿的开发版本。
我们还在考虑将本地构建包推送到每个开发者的本地私有源中。自己的机器,以帮助加速构建。 这对于哪些Feed来说会有问题吗?
如果这些定义是由依赖项文件中的dev(也必须是版本控制的)创建的,那么当源被提交到repo时,该设置将被带入Development feed(同样的焦点用于作为开发人员构建,只与他人共享)。 这可能是也可能不是开发Feed的正确之处?
当源被合并到qa-branch时,依赖关系中定义的提要仍然与开发者一样,可能从Development feed获取程序集。对于QA版本,我认为这可能不是我们想要的。 QA版本应该只限制发布程序集的订阅源,因为您希望查看更改是否按照发行版组件的预期工作。你不想用其他未经测试的"来测试它。质量保证大会。 这对其他人也有意义吗?
在发布分支中,发布版本应该只使用发布供稿程序集,我想? 我觉得可能会就此达成共识,所以也许根本不是一个问题:)。
所以,总结一下建议的过程......在构建期间我们要:
作为旁注,QA Feed实际上不会被任何其他版本使用。但是,质量保证部门将使用它们,因为他们将使用它们进行测试。
答案 0 :(得分:12)
在我看来,你建议的过程太复杂了,无论是现在你的团队规模还是未来一年的团队规模。
我理解为什么你认为你需要三个独立的提要(Dev,QA,Release),但我预测这将在一年的时间内让你感到痛苦。我希望您希望增加对包的稳定性/质量的信心,因为它们从开发到QA再到发布 - 这是一个完全合理的要求。但是,对于Dev,QA和Release,单独的分支,尤其是单独的构建被许多人视为反模式。具体来说,在开创性的书籍Continuous Delivery by Humble and Farley中,强烈建议只使用一个代码库来构建,并且这些构建中的任何应该能够在测试时被提升为Production。传递:“仅构建一次代码”是关键。
我会建议你:
而不是你勾勒出的模式packages.config
中使用版本范围限制,以便新版主要版本的软件包不会破坏构建(具有重大更改)简而言之,只需构建一次源代码,并设置自动化,以便可以使用部署管道快速推出对现有软件包的任何修复。