sonarqube整体框架

目录

整体架构

 1.应用模块架构图

2.sonarqube静态代码扫描全流程

2.1 sonar-scanner解析步骤:

2.2 sonarqube-server执行逻辑

2.2.1 /api/cesubmit接口-SubmitAction.handle

2.2.2 执行分析队列任务-CeWorkerImpl.findAndProcessTask

3.核心数据库表结构

小结


概要

因为sonarqube整个开源项目比较大,这里分为几部分讲解

  1. 整体框架+sonarqube扫描代码的流程
  2. sonar-scanner-cli源码分析
  3. sonarqube源码分析
  4. sonarqube-language源码分析

仅是个人对源码的理解,如有不正确的地方,欢迎讨论

整体架构

 1.应用模块架构图

2.sonarqube静态代码扫描全流程

整体流程包含3部分:

  1. sonar-scanner解析
  2. 执行sonarqube-server的/api/ce/submit接口,将task入队
  3. 从queue中获取task,执行task检测
2.1 sonar-scanner解析步骤:

在执行完解析后在.scannerwork/scanner-report生成如下报告,然后上传到sonarqube,等待sonarqube执行task:

  • activerules.pb:激活的规则信息(语言...key,org_qprofiles_uuid)
  • changesets-xx.pb:修改的文件
  • component-xx.pb:文件语言+文件路径
  • context-props.pb:analysis_properties表的解析数据
  • coverages-xx.pb:覆盖率文件。二进制文件
  • duplications-xx.pb:重复提交文件
  • external-issues-xx.pb:指定文件外部规则解析问题
  • issues-xx.pb:二进制文件
  • measures-xx.pb:二进制文件,度量指标
  • source-xx.txt:源码文件
  • syntax-highlightings-xx.pb:语法高亮显示
2.2 sonarqube-server执行逻辑

sonarqube-server执行分两部分

  1. /api/ce/submit:将report结果入库ce_task_input中
  2. 遍历ce_task_input消息,执行ce_task检测
2.2.1 /api/cesubmit接口-SubmitAction.handle
  1. 如果没有project,就插入project,将project作为mainBranchComponent
  2. 将report以输入流的方式保存在数据库ceTaskInput表中
  3. 录入提交的characteristicDto数据
  4. ceQueue表插入pending-report任务
  5. 组装ceTask并返回
2.2.2 执行分析队列任务-CeWorkerImpl.findAndProcessTask

 加载Steps的类跳转(没有加入参):

CeWorkerImpl.findAndProcessTask()
---> CeWorkerImpl.run()
---> CeWorkerImpl.executeTask()
---> ReportTaskProcessor.process()
---> ContainerFactory.create()
---> TaskContainerImpl()
---> TaskContainerImpl.populateContainer()
---> ProjectAnalysisTaskContainerPopulator.populateContainer()
---> SpringComponentContainer.add()
至此,将全部steps加载到context中

分析流程:

3.核心数据库表结构

数据库(sonarqube 9.9.3.79811)表是在执行sonar-scanner后相关的

小结

这里主要是架构图,为了方便理解,加入了一些源码跳转。后续会更新对应的源码解析。

  • 18
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值