我们使用jenkins自动化构建maven项目,构建完成后,将构建完成的所有的jar包 约11个 ,通过脚本脚本处理至打包服务器,打包服务器按照规则将每一个服务制作成docker镜象,统一使用。
长期下来发现,构建速度比较慢。因为服务拆分的比较多,任何一个子模块的变更都会触发整体项目重新构建,重新打包,造成大量的时间maven在构建没有变更的模块,docker镜象仓库也因为长期的无变更模块的也需要打包镜象而变得臃肿。
想了解下大家是怎么处理这个问题的?
附CI-CD流程图一张:
我们使用jenkins自动化构建maven项目,构建完成后,将构建完成的所有的jar包 约11个 ,通过脚本脚本处理至打包服务器,打包服务器按照规则将每一个服务制作成docker镜象,统一使用。
长期下来发现,构建速度比较慢。因为服务拆分的比较多,任何一个子模块的变更都会触发整体项目重新构建,重新打包,造成大量的时间maven在构建没有变更的模块,docker镜象仓库也因为长期的无变更模块的也需要打包镜象而变得臃肿。
想了解下大家是怎么处理这个问题的?
附CI-CD流程图一张:
让每一个模块触发各自的流程
maven可以指定打包哪个子模块。
不构建代码没有更改的模块,不是 jenkins 能决定的。
如果是 maven 构建的项目,一般情况而言,你每次打包的应该是「你需要启动的入口」模块就好,用下面的命令打包需要启动的入口模块,该模块依赖的其他模块(仅仅是依赖的)也会被打包处理。
如此,被「入口模块」依赖的模块会被 clean install,而其他不被依赖的模块就不会被处理了。
我们是每个模块单独创建了一个jenkins任务
这里可以选择增量构建,不晓得能不能满足你们的现有构建场景
我现在也是遇到这个问题,一个项目多个模块,但是有时候只改一个模块的代码,jenkins会全部构建一次,请问你怎么解决的呢
多模块项目会存在这样的问题,我是在jenkins里将每个模块做成一个任务,其中包括一个公共依赖的任务,让所有任务都从同一个git本地仓库拉代码,可以节省代码的同步时间,然后在公共依赖任务里打包公共的jar,扔到本地maven里,没改动时候不需要再次打包公共任务;其他单个项目只打包自己模块的代码,从maven里获取依赖的包。