一尘不染

Jenkins:如何从git仓库构建多个顶级项目?

jenkins

我有一个Git存储库,其中包含一堆顶级Maven项目(每个项目都位于带有pom.xml的自己的子目录中)。这里的顶层意味着这些项目位于存储库根目录下的子目录中。所有这些项目应保留在相同的Git存储库中。

repo
+--- projectA
    +--- pom.xml

+--- projectB
    +--- pom.xml

它们可以/应该由独立的詹金斯工作建立。因此,我们为projectA有一份工作,为projectB有一份工作。

以前使用Subversion,我能够为每个项目设置一个Jenkins作业,该作业仅检出项目源并从pom.xml运行Maven构建。

对于Git模型(可能与所有DVCS相同),这种情况会发生变化,我不确定什么是最佳实践。我看到了一些选择,但我真的不喜欢这些选择:

  1. 每个Jenkins作业都配置为克隆/拉动完整的Git存储库,并引用Maven构建的/pom.xml。因此,该工作具有所有代码,但仅构建其中一部分。
  2. Git提供了Submodules(http://book.git-scm.com/5_submodules.html),似乎很难处理(并且很容易损坏)
  3. 创建一个Maven父项目(包含所有项目的聚合器)项目,以触发每个项目的构建(具有一个詹金斯工作)。此pom.xml包含projectA和projectB的元素。

您是否看到任何其他有用的方法(非常典型的设置)。你有什么经验?有最佳做法吗?


阅读 1068

收藏
2020-07-25

共1个答案

一尘不染

我认为您正在为此而努力。如果这些项目作为版本单位发布,则实际上应该创建一个父POM。但是您可能应该只有一个CI工作。如果希望该构建快速进行,则可以将其配置为仅构建自上次构建以来已更改的模块(“构建”部分中的高级按钮-“增量构建-
仅构建已更改的模块”)。您还可以告诉Jenkins“在必要时执行并发构建”以一次测试多个提交。

但是我很好奇为什么您认为您想要多个CI工作?如果您认为这两个项目具有不同的生命周期,则可能应该分别对它们进行版本控制,因此应该在单独的git存储库中。不要保存git存储库,它们很便宜。实际上,几乎在每种情况下,交易者都越多。

通常,您希望给定的pom生成单个工件。聚集器poms可用于将较大工件的一部分分解为子模块,但前提是这些子模块不是自己释放的。

2020-07-25