我有一个有子项目的git项目。
示例代表:
parent
core
-src
-pom.xml
projA
-src
-pom.xml
projB
projB1
-src
-pom.xml
projB2
-src
-pom.xml
projC
-src
-pom.xml
pom.xml (parent pom)
projA
,projB1
,projB2
和projC
是使用内部core
项目的独立项目。 实际上,大约有8-10个独立项目。
我正在使用Jenkins进行CI。我正在使用git插件来获取项目详细信息和maven插件来构建项目并运行测试用例。
我只是使用clean install
目标。
目前,我创建了一份工作。一些项目需要更多时间(1-2小时)来运行所有测试用例。使用这种方法,项目的执行顺序是随机。
core
模块后,我想并行构建其他模块( 2或3 )以快速构建流程。我怎样才能做到这一点?答案 0 :(得分:1)
在父项目上运行maven构建并不是完全随机的。根据{{3}}:
反应堆
参考Maven中处理多模块项目的机制 作为反应堆。 Maven核心的这一部分执行以下操作:
- 收集所有可用的模块
- 将项目分类为正确的构建顺序
- 按顺序构建所选项目
反应堆排序
因为多模块构建中的模块可以相互依赖, 重要的是,反应堆以一种方式对所有项目进行分类 保证任何项目在需要之前建立。
在对项目进行排序时,以下关系得到遵守:
- 项目依赖于构建中的另一个模块
- 插件声明,其中插件是构建
中的另一个模块- 构建
中另一个模块的插件依赖项- 构建
中另一个模块的构建扩展声明- 醇>
<modules>
元素中声明的顺序(如果没有其他规则适用)请注意,仅使用“实例化”引用 - dependencyManagement和pluginManagement元素不会导致 更改为反应堆排序顺序
鉴于构建所有内容需要花费很长时间,我怀疑您可能正在运行某些集成测试。因此,我会尝试隔离它们并在每晚构建期间运行所有内容,同时在每次提交后在持续集成构建中运行(希望和期望的)快速单元测试。
关于并行设置,有几个选项有一个共同点:为每个模块创建一个作业。列举一些(你可以为其中一些documentation阅读一个很好的描述):
build whenever a SNAPSHOT dependency is built
触发器build after other projects are built
触发器就我个人而言,我只使用了对maven jobs&amp; amp;隐式pipelines支持。 snapshot dependency
触发器,意味着Jenkins分析模块之间的依赖关系并触发适当的依赖作业的构建。