利用CI机制管控jar依赖树

种地  金牌会员 | 2023-8-29 08:03:54 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 814|帖子 814|积分 2442

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
  1. dependency-tree:
  2.         @mvn clean -U package -Dmaven.test.skip=true dependency:tree -Dverbose -DoutputFile=target/dependency-tree.txt --settings settings.xml
  3.         @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
  4.         @git add doc/dependency-tree.txt
  5.         @git commit -m "fix: [CI make dependency-tree]依赖树变更"
  6.         @git push origin HEAD:master
复制代码
settings.xml
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <settings
  3.         xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"
  4.         xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  5.     <localRepository>./maven/repository</localRepository>
  6.     <profiles>
  7.         <profile>
  8.             <id>Repository</id>
  9.             <repositories>
  10.                 <repository>
  11.                     <id>nexus</id>
  12.                     <name>local private nexus</name>
  13.                     <url>***</url>
  14.                     <releases>
  15.                         <enabled>true</enabled>
  16.                     </releases>
  17.                     <snapshots>
  18.                         <enabled>false</enabled>
  19.                     </snapshots>
  20.                 </repository>
  21.                 <repository>
  22.                     <snapshots>
  23.                         <enabled>false</enabled>
  24.                     </snapshots>
  25.                     <id>central</id>
  26.                     <name>libs-releases</name>
  27.                     <url>***</url>
  28.                 </repository>
  29.                 <repository>
  30.                     <snapshots>
  31.                         <updatePolicy>always</updatePolicy>
  32.                     </snapshots>
  33.                     <id>snapshots</id>
  34.                     <name>libs-snapshots</name>
  35.                     <url>***</url>
  36.                 </repository>
  37.             </repositories>
  38.         </profile>
  39.     </profiles>
  40.     <activeProfiles>
  41.         <activeProfile>***</activeProfile>
  42.     </activeProfiles>
  43. </settings>
复制代码
4.2 修改gitignore文件


  • gitignore添加内容
  1. /maven
复制代码
4.3 配置bamboo

选择定时触发的流水线(master流水线)配置

在「下载代码」原子和「Maven构建」原子中间增加原子:「自定义脚本」(必须此顺序)

Shell代码块:
  1. cd ${globalParams.system.APP_IDENTIFIER}
  2. 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~至今
[table][tr]提效前(/人天)提效后(/人天)[/tr][tr][td]出现jar包冲突问题第1次[/td][td]2(今日发现,问题jar已引入半年之久,人力排查成本代价巨大)[/td][td]0.1(已前置发现异常并处理,早期成本代价极低,此冲突被避免)[/td][/tr][tr][td]出现jar包冲突问题第2次[/td][td]2.5(明日发现,需要mvn依赖树一一排查,发现jar引入更早,成本更大)[/td][td]0.5(即时出现冲突,分析doc的git history直接定位引入变动)[/td][/tr][tr][td]出现jar包冲突问题第3次[/td][td]3(多日后发现,问题jar已无法溯源引入时机,依赖关系混乱,只能研发互相询问,回忆)[/td][td]0.5(同上,doc git history定位引入变动)[/td][/tr][tr][td]......[/td][td]......[/td][td]......[/td][/tr][tr][td]出现jar包冲突问题n次以上,总成本计算[/td][td]>2*n[/td][td]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

种地

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表