我有一个 Git 存储库,其中包含一堆顶级 Maven 项目(每个项目都位于它们自己的带有 pom.xml 的子目录中)。这里的顶级意味着这些项目位于存储库根目录下的子目录中。所有这些项目都应保留在同一个 Git 存储库中。
repo
+--- projectA
+--- pom.xml
+--- projectB
+--- pom.xml
它们可以/应该由独立的 jenkins 作业构建。因此,我们为项目 A 分配了一份工作,为项目 B 分配了一份工作。
以前使用 Subversion 我能够设置一个 Jenkins 作业(针对每个项目),该作业将仅检查项目源并从 pom.xml 运行 Maven 构建。
对于 Git 模型(可能与所有 DVCS 相同),这种情况发生了变化,我不确定什么是最佳实践。我看到了几个选项,但没有一个是我真正喜欢的:
- 每个 Jenkins 作业都是 configured克隆/pull 完整的 Git 仓库和 引用 Maven 构建的/pom.xml。所以这份工作 拥有所有代码,但只构建了其中的一部分。
- Git 提供了子模块(http://book.git-scm.com/5_submodules.html) 处理起来有点棘手(而且很容易坏)
- 创建一个 Maven 父项目(包含所有项目的聚合器)项目 触发每个项目构建(有一个 Jenkins 工作)。此 pom.xml 包含项目 A 和项目 B 的元素。
您是否看到对此更有用的方法(非常典型的设置)。你的经验是什么?有什么最佳做法吗?
最佳答案
我认为您在这里违背了规律。如果这些项目作为版本化单元发布,您确实应该创建一个父 POM。但是你可能应该只有一个 CI 作业。如果您希望该构建快速进行,您可以将其配置为仅构建自上次构建以来发生更改的模块(构建部分中的高级按钮 - “增量构建 - 仅构建更改的模块”)。您还可以告诉 Jenkins“必要时执行并发构建”以一次测试多个提交。
但我很好奇你为什么认为你想要多个 CI 工作?如果您认为这两个项目具有不同的生命周期,也许它们应该单独进行版本控制,因此应该在单独的 git 存储库中。不要保存 git 存储库,它们很便宜。事实上,几乎在所有情况下都是越多越好。
通常,您希望给定的 pom 生成单个 Artifact 。聚合器 poms 可用于将较大 Artifact 的各个部分分解为子模块,但前提是这些子模块未自行发布。
关于git - Jenkins:如何从一个 git 存储库构建多个顶级项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8922857/