在詹金斯订购git child maven项目

时间:2016-08-22 10:55:51

标签: git maven jenkins

我有一个有子项目的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)

projAprojB1projB2projC是使用内部core项目的独立项目。 实际上,大约有8-10个独立项目。

我正在使用Jenkins进行CI。我正在使用git插件来获取项目详细信息和maven插件来构建项目并运行测试用例。

我只是使用clean install目标。

目前,我创建了一份工作。一些项目需要更多时间(1-2小时)来运行所有测试用例。使用这种方法,项目的执行顺序是随机

  • 有没有更好的方法以更好的方式处理它并控制构建执行的顺序,以便我首先构建脆弱的模块&稳定的以后?
  • 构建core模块后,我想并行构建其他模块( 2或3 )以快速构建流程。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

在父项目上运行maven构建并不是完全随机的。根据{{​​3}}:

  

反应堆

     

参考Maven中处理多模块项目的机制   作为反应堆。 Maven核心的这一部分执行以下操作:

     
      
  • 收集所有可用的模块
  •   
  • 将项目分类为正确的构建顺序
  •   
  • 按顺序构建所选项目
  •   
     

反应堆排序

     

因为多模块构建中的模块可以相互依赖,   重要的是,反应堆以一种方式对所有项目进行分类   保证任何项目在需要之前建立。

     

在对项目进行排序时,以下关系得到遵守:

     
      
  1. 项目依赖于构建中的另一个模块
  2.   
  3. 插件声明,其中插件是构建
  4. 中的另一个模块   
  5. 构建
  6. 中另一个模块的插件依赖项   
  7. 构建
  8. 中另一个模块的构建扩展声明   
  9. <modules>元素中声明的顺序(如果没有其他规则适用)
  10.         

    请注意,仅使用“实例化”引用 -   dependencyManagement和pluginManagement元素不会导致   更改为反应堆排序顺序

鉴于构建所有内容需要花费很长时间,我怀疑您可能正在运行某些集成测试。因此,我会尝试隔离它们并在每晚构建期间运行所有内容,同时在每次提交后在持续集成构建中运行(希望和期望的)快速单元测试。

关于并行设置,有几个选项有一个共同点:为每个模块创建一个作业。列举一些(你可以为其中一些documentation阅读一个很好的描述):

就我个人而言,我只使用了对maven jobs&amp; amp;隐式pipelines支持。 snapshot dependency触发器,意味着Jenkins分析模块之间的依赖关系并触发适当的依赖作业的构建。