我有一个Git存储库,其中包含一堆顶级maven项目(每个项目都位于自己的子目录中,并带有pom.xml)。这里的顶级意味着这些项目位于存储库根目录下的子目录中。所有这些项目都应保留在同一个Git存储库中。
repo
+--- projectA
+--- pom.xml
+--- projectB
+--- pom.xml
他们可以/应该由独立的詹金斯工作建立。所以我们有一个projectA的工作和一个projectB的工作。
以前使用Subversion,我能够设置一个Jenkins作业(对于每个项目),只检查项目源并从pom.xml运行Maven构建。
使用Git模型(可能与所有DVCS相同),这会发生变化,我不确定什么是最佳做法。我看到了一些选项,我不喜欢这些选项:
您是否看到了更有用的方法(非常典型的设置)。你有什么经历?任何最佳做法?
答案 0 :(得分:4)
我认为你在这里反对粮食。如果这些项目作为版本化单元发布,您确实应该创建父POM。但是你应该只有一个CI工作。如果您希望快速构建该构建,则可以将其配置为仅构建自上次构建以来已更改的模块(构建部分中的高级按钮 - “增量构建 - 仅构建已更改的模块”)。您还可以告诉Jenkins“必要时执行并发构建”以一次测试多个提交。
但我很好奇为什么你认为你想要多个CI工作?如果你认为这两个项目有不同的生命周期,也许它们应该单独编辑,因此应该在单独的git存储库中。不保存git存储库,它们很便宜。事实上,几乎在每种情况下越多越好。
通常,您希望给定的pom生成单个工件。聚合器poms可用于将较大的工件的一部分拆分为子模块,但仅限于这些子模块不能自行释放。
答案 1 :(得分:1)
这样我们确切地知道在哪个版本(hg版本号)下,彼此编译。当我准确地说,我的意思是我可以验证它是二进制相同的。
使用版本号太粗糙了。例如,今天我发现了一个只能在hg版本3367下重现但在hg版本3368中不能重现的错误。使用多个hg repos本来是不可重现的,因为每天每个项目中有几个提交,因此它是不可能确切地确定每个项目的使用版本,只有hg版本是正确使用的(使用bisect来查找错误)。
事实证明,我们更改了其中一个子项目中的客户端数据库驱动程序版本,这使得我们的自动化dao-generation因NPE而失败。驱动程序当然如果是我们不写的发布版本,我们只需使用供应商提供的版本。我们需要几天的时间来调试它,但由于我们每小时使用Jenkins进行构建,我们知道有10到20个提交进行搜索,只有3或4次触及dao-generator,所以这是一项简单的任务。
每个项目的混合版本都会让后排的后背变得很痛苦,因为我们会有几个不同的dao-generator-3.1.2.jar,它们彼此之间有点不同(除非你期望我们在每次提交后更改版本号,或者如果在Jenkins / maven中有一些配置/自动执行此操作的任何配置?那就太棒了......)。
答案 2 :(得分:0)
有最好的做法就是不要重复自己。因此,从这个角度来看,拥有超级POM会很好。
我可能会选择选项1.磁盘空间通常很便宜。
但是,如果不再重新设置Jenkins,3可以更容易部署到新系统。