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