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

Mar*_*rer 21 git maven jenkins

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

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

+--- projectB
    +--- pom.xml
Run Code Online (Sandbox Code Playgroud)

他们可以/应该由独立的詹金斯工作建立.所以我们有一个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父(包含所有项目的聚合器)项目,触发每个项目构建(具有单个jenkins作业).这个pom.xml包含projectA和projectB的元素.

你有没有看到更有用的方法(非常典型的设置).你有什么经历?任何最佳做法?

rec*_*ell 4

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

但我很好奇你为什么想要多个 CI 工作?如果您认为这两个项目具有不同的生命周期,也许它们应该单独进行版本控制,因此应该位于单独的 git 存储库中。不要保留 git 存储库,它们很便宜。事实上,几乎在任何情况下,越多越好。

通常,您希望给定的 pom 生成单个工件。聚合器 pom 可用于将较大工件的各个部分分解为子模块,但前提是这些子模块未自行发布。