考虑下面的场景:服务器
一个Git repository中有6个Java项目A,B,C,D,E,F.架构
A是最底层模块。B依赖A, C,D,E,F又同时依赖A和B。 这时候项目能够分红三层关系。maven
需求:ui
1.Jenkins只编译文件有改动的项目xml
默认状况系,只要一个Git repository中有代码改动,6个项目就所有会被编译,这显然是很是浪费资源的.资源
安装Pathignore plugin后,在每一个Jenkins的项目中以下图设置:虚拟机
** 表明sdk/common目录下的全部子目录的文件产品
2.手动指定编译顺序it
因为咱们采用的是maven项目,Jenkins能够根据pom.xml知道项目间的依赖关系,所以无需设置就能够自动一层层编译。io
可是Jenkins会并行编译不一样的项目,为了节省服务器的资源,能够经过手动设置来控制。
能够在Build other projects里面 选择下一步要编译的项目。
3.还能够指定Advanced Project Options里面的两个选项:
Block build when upstream project is building
Block build when downstream project is building
注意,2和3只是控制了编译顺序,可是1仍然会起到做用。若是A的代码提交出发了自动编译,而后第2步指定了以后要编译B, 而规则1检查B是否有代码变更,若是B代码没有改动,则编译终止。 这是很是合理的,节省了不少资源。
注意,仅仅适用于Java等基于虚拟机的语言,若是是C++,最好项目所有从新编译,除非你使用的是相似COM的技术搭建产品架构,而且interface没有改变。