我们正在努力改进我们的 Jenkins 设置。到目前为止,我们有两个目录:/plugins 和 /tests。
我们的项目是一个 Eclipse Plugins 的多模块项目。/tests 文件夹中的测试插件是片段项目,依赖于 /plugins 中相应的生产代码插件。
到目前为止,我们只有一项 Jenkins 工作,它检查了 /plugins 和 /tests,构建了所有这些并产生了 Surefire 结果等。
我们现在正在考虑将项目拆分为与我们提供的功能相对应的较小的工作。看来我们试图做到这一点的方式并不理想。
我们尝试了以下方法:
- 我们为核心功能创建了一个工作。该作业检查整个 /plugins 和 /tests 目录并仅构建该功能所包含的插件。该作业有一个单独的 pom.xml,它定义了核心工件并讲述了该功能中包含的模块。
- 我们为应该在功能插件上运行的测试创建了一个单独的作业。此作业使用来自核心作业的克隆工作区。该作业将在构建核心功能后运行。
我不知何故认为这不是最佳的。
- 例如,只有核心作业可以更新签出的文件。如果只更新测试,核心功能不需要重新构建,但它会。
- 一旦我有一个依赖于核心功能的功能,这个功能要么需要使用核心功能工作区的克隆,要么检查它自己的 /plugins 和 /tests 副本,这会导致膨胀。
- 使用克隆的工作区,我无法更新我的来源。所以当我有一个特性依赖于另一个特性时,只有更新和构建核心特性才能完成这项工作。
我想我在这里遗漏了一些基本的东西。有人可以帮忙吗?肯定有一个更简单的方法。
编辑:如果一切正常,我将尝试制定我认为理想情况下会发生的情况:
- 检查功能组件是否已更改(即可以对其进行更新)
- 如果更改,构建功能
- 如有必要,构建依赖特征(即检查 ob 对应的作业)
- 构建功能本身
- 如果构建成功,开始功能测试工作
- 让我看看功能作业中的测试作业的结果
最后,项目工作应该
- 做一个夜间构建
- 查看 /plugins 和 /tests 的所有来源
- 全部构建,全部测试,将结果发送到 Sonar
此外,如果不需要每晚构建,那将是整洁的,因为项目功能的构建和测试结果将结合在项目工作结果中。
这样的事情可能吗?