当前位置: 首页 >  信息化服务 >  利用CI机制管控jar依赖树

利用CI机制管控jar依赖树

导读:1. 现状·问题.你还记得你排查jar冲突的付出么?.为了有效控制jar包更新带来的未知jar引入和变动,我们经常使用dependency-.tree来查看依赖关系排查问题,通常是出现问题再被动分析和排查,此时人力成本是巨大的,同时系统已出问题,没有后悔药。.2. 分析原因.ja

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 转载请注明出处

内容
  • 【MRTK】解决 Unity.IL2CPP.Building.BuilderFailedException: Lump_libil2cpp_vm.cpp 报错问题
    【MRTK】解决 Unity.I
    2023-12-07
    前言.最近在部署 HoloLens 应用的时候遇到了这个报错,无论是本地部署、远程部署、还是导出 APPX 项目包,都会
  • 十年后的第一篇:记录对两个面试问题的思考
    十年后的第一篇:记录对两个面试问
    2023-12-02
    太久没写过博客了,用户名密码甚至连用哪个邮箱注册的都不记得了,如果不是最近面试官要看的话实在是不想翻出来(如果面试官看到
  • 长文多图一步步讲清楚:DDD理论、建模与代码实现全流程
    长文多图一步步讲清楚:DDD理论
    2023-12-01
    1 六个问题.1.1 为什么使用DDD.DDD方法论核心是将问题不断分解,把大问题分解为小问题,大业务分解小领域,简而言
  • 可爱儿童内衣套装,优质棉质,柔软透气,呵护宝宝肌肤
    可爱儿童内衣套装,优质棉质,柔软
    2024-01-05
    可爱儿童内衣套装,优质棉质,柔软透气,呵护宝宝肌肤.宝宝的皮肤是非常娇嫩的,所以选择合适的内衣套装对于宝宝的健康和舒适至
  • 时尚潮流运动鞋
    时尚潮流运动鞋
    2024-01-15
    时尚潮流运动鞋.时尚潮流运动鞋一直是年轻人喜爱的时尚单品,它不仅舒适耐穿,更是一种个性的象征。随着时尚潮流不断更新,运动
  • 修身弹力牛仔裤
    修身弹力牛仔裤
    2023-12-26
    修身弹力牛仔裤:展现你的魅力.一、时尚的必备单品.修身弹力牛仔裤一直都是时尚界的必备单品,它不仅可以展现出个人的魅力,还
  • 休闲简约短袖衬衫
    休闲简约短袖衬衫
    2023-12-21
    休闲简约短袖衬衫.现代人生活节奏快,休闲简约的穿着成为时尚潮流。短袖衬衫作为经典的休闲单品,一直备受时尚人士的青睐。它舒
  • 休闲宽松T恤衫,释放自在舒适气息
    休闲宽松T恤衫,释放自在舒适气息
    2023-12-26
    休闲宽松T恤衫,释放自在舒适气息.在这个喧嚣的都市中,人们的生活节奏变得越来越快,压力也越来越大。因此,人们更加注重舒适
  • 潮流风衣大衣,彰显都市时尚风采
    潮流风衣大衣,彰显都市时尚风采
    2023-12-16
    潮流风衣大衣,彰显都市时尚风采.潮流风衣大衣一直是时尚界备受追捧的单品之一。它既能为我们遮风挡雨,又能为我们穿出时尚感,
  • 时尚修身连衣裙,展现优雅女性魅力
    时尚修身连衣裙,展现优雅女性魅力
    2023-12-06
    时尚修身连衣裙,展现优雅女性魅力.时尚修身连衣裙一直是女性衣橱里的必备单品,不仅款式多样,而且能够展现出女性的优雅魅力。
  • 保暖舒适羊毛大衣
    保暖舒适羊毛大衣
    2024-01-05
    保暖舒适羊毛大衣.冬季来临,寒冷的天气让人们更加注重保暖。在这个时候,一件保暖舒适的羊毛大衣成为了许多人的首选。羊毛大衣
  • 萌娃配饰套装,包包、帽子、围巾等,增添宝宝的时尚气息
    萌娃配饰套装,包包、帽子、围巾等
    2024-01-20
    萌娃配饰套装,为宝宝增添时尚气息.宝宝是家庭的小太阳,****们都希望给他们最好的一切。随着时尚的发展,宝宝的时尚潮流也
  • 轻盈雪纺衬衫,打造清新淑女形象
    轻盈雪纺衬衫,打造清新淑女形象
    2023-12-31
    轻盈雪纺衬衫,打造清新淑女形象.雪纺材质的衬衫一直以来都是清新淑女形象的代表,它轻盈飘逸的质地,柔软透气的触感,让人仿佛