研发效能提升 maven依赖扫描 版本统一 漏洞版本提醒

大家好,我是烤鸭:

   整点干货,代码级别的版本统一,以及漏洞版本的扫描。

背景

两个方面吧。

  • 项目整体的架构不统一,springboot/cloud 配置/注册中心也用的不统一,版本更是五花八门,怎么快速的找到问题,给出合理建议。

  • 去年年底的时候都被log4j搞过,漏洞安全也被提到第一线,快读定位漏洞版本。

思路

先画一个功能大点的业务流程图,再从具体某一个点详细说下

在这里插入图片描述

架构统一:

  • 制定规则,比如 都用springboot+cloud ,配置/注册中心 都用nacos。
  • 统一版本,像springboot 2.6.7 针对不同的版本,用的基础包也不一样,尤其是nacos-client这种的,spring跨版本,这玩意就报错。
  • 维护一致性,有的项目太老了,也不建议一步升级到位,需要先小幅升级一个大版本后再继续升级,这种的就需要维护一个列表范围,以及对应的中间件包。
  • 做好升级指南,
  • 通知提示,架构不规范的要做好醒目的提醒和提示,类似下面这种。

在这里插入图片描述

代码实现

maven-invoker

        <!-- https://mvnrepository.com/artifact/org.apache.maven.shared/maven-invoker -->
        <dependency>
            <groupId>org.apache.maven.shared</groupId>
            <artifactId>maven-invoker</artifactId>
            <version>3.0.1</version>
        </dependency>	

指定pom路径下扫描依赖包,相当于执行 mvn dependency:list

public List<String> mvnDependencyList(String pomPath) {
    InvocationResult result = null;
    List<String> list = new ArrayList<>();
    try {
        String mavenHome = System.getenv("MAVEN_HOME");
        InvocationRequest request = new DefaultInvocationRequest();
        request.setPomFile(new File(pomPath));
        request.setGoals(Collections.singletonList("dependency:list"));
        
        Invoker invoker = new DefaultInvoker();
        invoker.setMavenHome(new File(mavenHome));
        
        invoker.setLogger(new PrintStreamLogger(System.out, InvokerLogger.INFO));
        final boolean[] isStart = {false};
        invoker.setOutputHandler(hanlder -> {
            if (hanlder.contains("The following files have been resolved") || hanlder.contains("---<")) {
                isStart[0] = true;
            }
            if (hanlder.contains("[INFO] BUILD SUCCESS")) {
                isStart[0] = false;
            }
            if (isStart[0]) {
                list.add(hanlder);
            }
        });
        
        result = invoker.execute(request);
    } catch (MavenInvocationException e) {
        e.printStackTrace();
    }

    logger.info("mvnDependencyList result =[{}]",result);
    return list;
}

效果如图:
在这里插入图片描述

解析每行的版本和版本号,和标准的进行匹配。

这个就不贴代码了,解析过程也不难。

将解析后的结果存储,进行页面展示或者邮件发出。

做成定时个功能,可以定期扫描版本。

尤其是针对需要漏洞升级的时候,特别管用,之前公司出了一版扫描pom文件中的文本内容,真的是无力吐槽了,maven项目不扫依赖扫文本,何况还有多版本冲突问题,肯定取实际编译的。

总结

  • 用在公司项目的架构版本统一,方便制定规则和监控进度。
  • 用于漏洞升级这种特别事件,跟上面的功能类似。
  • 有git信息了,能干的事情就更多了。获取分支、tag、最新代码增量等等,做一个效能输出。
  • 有了代码,还可以干代码级别的扫描,坏味道、漏洞等等,规范代码维度。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烤鸭的世界我们不懂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值