jenkins自动化构建maven项目时,如何避免重复构建代码无变更模块
我们使用jenkins自动化构建maven项目,构建完成后,将构建完成的所有的jar包 约11个 ,通过脚本脚本处理至打包服务器,打包服务器按照规则将每一个服务制作成docker镜象,统一使用。
长期下来发现,构建速度比较慢。因为服务拆分的比较多,任何一个子模块的变更都会触发整体项目重新构建,重新打包,造成大量的时间maven在构建没有变更的模块,docker镜象仓库也因为长期的无变更模块的也需要打包镜象而变得臃肿。
想了解下大家是怎么处理这个问题的?
附CI-CD流程图一张:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(19)
多模块项目会存在这样的问题,我是在jenkins里将每个模块做成一个任务,其中包括一个公共依赖的任务,让所有任务都从同一个git本地仓库拉代码,可以节省代码的同步时间,然后在公共依赖任务里打包公共的jar,扔到本地maven里,没改动时候不需要再次打包公共任务;其他单个项目只打包自己模块的代码,从maven里获取依赖的包。
gitlab配了webhook的话,每次push都会向jenkins发送post请求,请求参数里就包含本次push修改了哪些模块,像这样,只有apiservice模块修改了,用jenkinsfile抓取字段分析
不太懂
回复
脚本不是在jenkins中弄的,是shell脚本,jenkins中负责调取shell脚本。shell脚本根据jenkins传输至构建服务器的构建结果jar包来判断,需要打包哪些服务镜象。
回复
我们认为我们的构建频率不需要git触发。。手动点的。。 任务完成,手发动触发构建,上报测试镜象ID 测试在k8s UI上填入直接变更镜象ID运行就可以。
这里可以选择增量构建,不晓得能不能满足你们的现有构建场景
不满足。 现在这个问题已经处理掉了,通过POM里边开关模块来确定需要构建哪些。
我现在也是遇到这个问题,一个项目多个模块,但是有时候只改一个模块的代码,jenkins会全部构建一次,请问你怎么解决的呢
每个模块单独创建一个jenkins任务,对应的,每个模块也都需要一个git地址吧?
我暂时没有找到创建项目,但是不指定Source Code Management来源的。 如果都使用同一来源,就会有一个项目如果分了11个模块,代码检出11份同样的代码。每个项目构建自己需要的模块这样的情况
我们是每个模块单独创建了一个jenkins任务
如果是这个样子的话,每次构建就需要去变更jenkins中 build的参数配置。我的理想状态当然是不希望开发搞这个的。
回复
@巴拉迪维 : 目前我们都是手工来点击构建的。git提交的规范性一直实行的不是很好,jenkins自动触发构建频率太高了,我们没有使用自动触发构建。 我仔细研究下回调,能不能可行。 感谢
不构建代码没有更改的模块,不是 jenkins 能决定的。
如果是 maven 构建的项目,一般情况而言,你每次打包的应该是「你需要启动的入口」模块就好,用下面的命令打包需要启动的入口模块,该模块依赖的其他模块(仅仅是依赖的)也会被打包处理。
如此,被「入口模块」依赖的模块会被 clean install,而其他不被依赖的模块就不会被处理了。
是的。但是如果每次打包都需要指定打包哪个子模块,这样子的话,每一次构建,就都需要开发人员去手动修改jenkins的配置,感觉有点儿麻烦呢。
maven可以指定打包哪个子模块。
如果互相依赖的话,就按顺序触发各个模块
回复
@哎码 : 你的意思是把一个项目每个模块都导入jenkins作为项目么?
让每一个模块触发各自的流程