jenkins自动化构建maven项目时,如何避免重复构建代码无变更模块

发布于 2022-04-30 21:25:58 字数 446 浏览 967 评论 19

我们使用jenkins自动化构建maven项目,构建完成后,将构建完成的所有的jar包 约11个 ,通过脚本脚本处理至打包服务器,打包服务器按照规则将每一个服务制作成docker镜象,统一使用。

长期下来发现,构建速度比较慢。因为服务拆分的比较多,任何一个子模块的变更都会触发整体项目重新构建,重新打包,造成大量的时间maven在构建没有变更的模块,docker镜象仓库也因为长期的无变更模块的也需要打包镜象而变得臃肿。

 

想了解下大家是怎么处理这个问题的? 

附CI-CD流程图一张:

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(19

放赐﹉ 2022-05-06 08:17:35

多模块项目会存在这样的问题,我是在jenkins里将每个模块做成一个任务,其中包括一个公共依赖的任务,让所有任务都从同一个git本地仓库拉代码,可以节省代码的同步时间,然后在公共依赖任务里打包公共的jar,扔到本地maven里,没改动时候不需要再次打包公共任务;其他单个项目只打包自己模块的代码,从maven里获取依赖的包。

清旖 2022-05-06 08:17:35

gitlab配了webhook的话,每次push都会向jenkins发送post请求,请求参数里就包含本次push修改了哪些模块,像这样,只有apiservice模块修改了,用jenkinsfile抓取字段分析

"modified": [
        "apiservice/src/main/resources/application-dev.properties"
      ],
︶ ̄戏舞 2022-05-06 08:17:34

不太懂

梦回梦里 2022-05-06 08:17:33

回复
脚本不是在jenkins中弄的,是shell脚本,jenkins中负责调取shell脚本。shell脚本根据jenkins传输至构建服务器的构建结果jar包来判断,需要打包哪些服务镜象。

夏至、离别 2022-05-06 08:17:32

回复
我们认为我们的构建频率不需要git触发。。手动点的。。 任务完成,手发动触发构建,上报测试镜象ID 测试在k8s UI上填入直接变更镜象ID运行就可以。

段念尘 2022-05-06 08:17:29

这里可以选择增量构建,不晓得能不能满足你们的现有构建场景

 

舞袖。长 2022-05-06 08:17:29

不满足。 现在这个问题已经处理掉了,通过POM里边开关模块来确定需要构建哪些。

那片花海 2022-05-06 08:17:29

我现在也是遇到这个问题,一个项目多个模块,但是有时候只改一个模块的代码,jenkins会全部构建一次,请问你怎么解决的呢

 

帝王念 2022-05-06 08:17:28

每个模块单独创建一个jenkins任务,对应的,每个模块也都需要一个git地址吧?

巡山小妖精 2022-05-06 08:17:27

我暂时没有找到创建项目,但是不指定Source Code Management来源的。 如果都使用同一来源,就会有一个项目如果分了11个模块,代码检出11份同样的代码。每个项目构建自己需要的模块这样的情况

横笛休吹塞上声 2022-05-06 08:17:25

我们是每个模块单独创建了一个jenkins任务

不甘平庸 2022-05-06 08:17:24

如果是这个样子的话,每次构建就需要去变更jenkins中 build的参数配置。我的理想状态当然是不希望开发搞这个的。

橙幽之幻 2022-05-06 08:17:23

回复
@巴拉迪维 : 目前我们都是手工来点击构建的。git提交的规范性一直实行的不是很好,jenkins自动触发构建频率太高了,我们没有使用自动触发构建。 我仔细研究下回调,能不能可行。 感谢

哀由 2022-05-06 08:13:16

不构建代码没有更改的模块,不是 jenkins 能决定的。

如果是 maven 构建的项目,一般情况而言,你每次打包的应该是「你需要启动的入口」模块就好,用下面的命令打包需要启动的入口模块,该模块依赖的其他模块(仅仅是依赖的)也会被打包处理。

mvn -pl 入口模块 -am clean install -DskipTests

如此,被「入口模块」依赖的模块会被 clean install,而其他不被依赖的模块就不会被处理了。

深爱成瘾 2022-05-06 07:15:16

是的。但是如果每次打包都需要指定打包哪个子模块,这样子的话,每一次构建,就都需要开发人员去手动修改jenkins的配置,感觉有点儿麻烦呢。

谈情不如逗狗 2022-05-06 06:52:06

maven可以指定打包哪个子模块。

愚人国度 2022-05-05 08:07:30

如果互相依赖的话,就按顺序触发各个模块

偏爱你一生 2022-05-05 08:02:28

回复
@哎码 : 你的意思是把一个项目每个模块都导入jenkins作为项目么?

终难遇 2022-05-03 22:20:53

让每一个模块触发各自的流程

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文