利用CI机制管控jar依赖树 | 京东云技术团队
1. 现状·问题
你还记得你排查jar冲突的付出么?
为了有效控制jar包更新带来的未知jar引入和变动,我们经常使用dependency-tree来查看依赖关系排查问题,通常是出现问题再被动分析和排查,此时人力成本是巨大的,同时系统已出问题,没有后悔药。
2. 分析原因
jar包依赖是异变的,且隐形的,jar冲突导致的问题经常发生,研发无法每次都关注其变化。
3. 采取措施
采用“敏捷”思想,小步走,每天定时监控jar包依赖关系的变化,让风险前置,主动显现出未知的问题。
技术解决问题,CI/CD能力降低研发成本,每天23:00定时自动执行,All研发每天关注 jar doc change ~
—— 我们将依赖树作为文件进行git版本控制,同时维护到CI上自动管控jar依赖关系的变更,这样可以即时发现依赖关系的变动。流水线定时每日触发扫描依赖树,保证每日最新,发现有变动即时发起doc变更,当研发关注到mr后,可以查看前一日是who改动了what,有效管理jar包。
4. 实践步骤
4.1 创建Makefile文件
根目录:doc/dependency-tree.txt 空文件
Makefile
dependency-tree: @mvn clean -U package -Dmaven.test.skip=true dependency:tree -Dverbose -DoutputFile=target/dependency-tree.txt --settings settings.xml @grep -v 'omitted for' wms-outbound-web/target/dependency-tree.txt | grep -vw "tests" | grep -vw "test" | sed -e 's/TEST-SNAPSHOT/SNAPSHOT/g' > doc/dependency-tree.txt @git add doc/dependency-tree.txt @git commit -m "fix: [CI make dependency-tree]依赖树变更" @git push origin HEAD:master
settings.xml
<?xml version="1.0" encoding="UTF-8"?> <settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd" xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <localRepository>./maven/repository</localRepository> <profiles> <profile> <id>Repository</id> <repositories> <repository> <id>nexus</id> <name>local private nexus</name> <url>***</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> <repository> <snapshots> <enabled>false</enabled> </snapshots> <id>central</id> <name>libs-releases</name> <url>***</url> </repository> <repository> <snapshots> <updatePolicy>always</updatePolicy> </snapshots> <id>snapshots</id> <name>libs-snapshots</name> <url>***</url> </repository> </repositories> </profile> </profiles> <activeProfiles> <activeProfile>***</activeProfile> </activeProfiles> </settings>
4.2 修改gitignore文件
- gitignore添加内容
/maven
4.3 配置bamboo
选择定时触发的流水线(master流水线)配置
在「下载代码」原子和「Maven构建」原子中间增加原子:「自定义脚本」(必须此顺序)
Shell代码块:
cd ${globalParams.system.APP_IDENTIFIER} make
- 流程控制选择:失败继续(原因:CI修改代码需要mr评审,所以评审机制会导致push失败,无碍)
4.4 配置coding
增加xn_testdev_ci账号 master权限,同时增加到保护分支列表权限中
5. 实现效果
5.1 bamboo日志
运行完毕可以看到日志success,push发起评审即可
5.2 coding MR记录
可以查看到bamboo账号「测试开发_持续集成」发起的mr,评审即可(只改动依赖树文件)
6. 效能提升
2021/10/19~至今,此实践 发现42次依赖变动,其中7次发现了代码问题(研发已即时处理,否则每次未知的依赖变动都对应 >1 的研发成本)
效能量化 模拟:2021/10/19~至今
| 提效前(/人天) | 提效后(/人天) |
出现jar包冲突问题第1次 | 2(今日发现,问题jar已引入半年之久,人力排查成本代价巨大) | 0.1(已前置发现异常并处理,早期成本代价极低,此冲突被避免) |
出现jar包冲突问题第2次 | 2.5(明日发现,需要mvn依赖树一一排查,发现jar引入更早,成本更大) | 0.5(即时出现冲突,分析doc的git history直接定位引入变动) |
出现jar包冲突问题第3次 | 3(多日后发现,问题jar已无法溯源引入时机,依赖关系混乱,只能研发互相询问,回忆) | 0.5(同上,doc git history定位引入变动) |
...... | ...... | ...... |
出现jar包冲突问题n次以上,总成本计算 | >2*n | <0.5*n |
7. 简要总结
【jar包冲突】是每个code repo和每位研发的难题 !
- 如果我们「可以将问题避免、可以将风险前置」,那后期「维护成本必然是降低的,日常效能必然是提升的」
- 利用CI/CD机制,将jar包依赖树作为doc文件管控到git中,将每一次变动都记录快照,按照“敏捷”思想拆解迭代(周期是每天23:00定时)自动扫描依赖关系,最早发现最早处理,别再被动了,主动出击吧!
作者:京东物流 周奕儒
来源:京东云开发者社区 自猿其说Tech 转载请注明出处

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
融入数据浪潮,KaiwuDB 期待与您共赴 DTCC 2023
2023年8月16日-18日(本周三至周五),KaiwuDB 将亮相第十四届中国数据库技术大会 DTCC 2023。 大会以“数智赋能 共筑未来”为主题,设置 2 大主会场,20+ 技术专场,邀请超百位行业专家,重点围绕 HTAP 与多模数据库应用、图数据技术、云原生数据库、实时数仓等内容展开分享和探讨。 转瞬间,距离上次与大家线下见面已过去了近两年。在这段时间里,产品在不断的迭代,但始终不变的是我们致力于解决大家可能会遇到的切实难题。本次,我们也诚挚邀请新老朋友们莅临相见,期待与你们展开一次真诚的 face to face。 会前 Tips 亮点1: 本次大会 KaiwuDB 将在8月17日上午9:55于主论坛会场,为大家带来《从多模到 AI,KaiwuDB 探索通晓万物之路》主题分享,敬请期待。 亮点2: 大会期间,KaiwuDB 将亮相北京国际会议中心 2 楼 11 号展位,为大家带来全系产品家族及最新应用案例。 会场分布平面图 展台现场会有我们专业的技术老师做 1V1 咨询服务,欢迎相关领域专家、用户、伙伴莅临指导,进一步了解 KaiwuDB。当然,精美限量周边从不缺席,诚邀大...
- 下一篇
JECloud 基于微服务架构的低代码平台
项目介绍 JECloud 平台后端采用微服务架构,前端采用微应用架构,可做到不同服务使用不同数据库独立运行。全平台采用基于模型驱动的设计模式,并在前后端留有大量的代码植入入口,方便开发者对平台进行改造扩充。JECloud 适合软件开发公司、企业信息中心、个人开发者使用,适用于开发 ERP、OA、CRM、EAM、WMS、MES、PM 等企业级信息化系统,是企业数字化转型的必备工具。 平台体验 官网地址: JECloud-基于微服务架构的低代码平台 体验地址: https://example.jecloud.net/ 登录用户:admin 登录密码:123456 gitee主项目: jecloud: JECloud 基于微服务架构的低代码平台 项目框架 技术选型 开发语言:Java,JavaScript 技术架构:后端项目采用微服务架构,前端项目采用微前端架构 数 据 库:开源版仅支持MySQL 前端技术选型: 后台技术选型: 核心优势 1、采用微服务架构的低代码平台 2、JECloud可作为构建业务中台的基座工具 3、移动应用满足小程序端 4、能管理大型集团组织,能接入外部机构 5...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Red5直播服务器,属于Java语言的直播服务器
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作