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

标签 git maven jenkins

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

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

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

它们可以/应该由独立的 jenkins 作业构建。因此,我们为项目 A 分配了一份工作,为项目 B 分配了一份工作。

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

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

  1. 每个 Jenkins 作业都是 configured克隆/pull 完整的 Git 仓库和 引用 Maven 构建的/pom.xml。所以这份工作 拥有所有代码,但只构建了其中的一部分。
  2. Git 提供了子模块(http://book.git-scm.com/5_submodules.html) 处理起来有点棘手(而且很容易坏)
  3. 创建一个 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/

相关文章:

Git:将文本文件制作为二进制文件,同时仍显示文本差异

git - 强制 "git push"覆盖远程文件

maven - 在 TeamCity 构建步骤中使用 Maven 属性

svn - 版本控制有多远?

java - Maven:迭代 Maven 资源目录中的文件目录

java - 无法找到或加载主类BasicApp.Application

azure - Gitlab + Jenkins 与 Azure Active Directory 身份验证

java - Jenkins 自动部署tomcat 7

docker - Jenkins管道无法构建Docker镜像

git - git revert, git checkout和git reset三者之间有什么不同?