热门搜索 :
考研考公
您的当前位置:首页正文

SonarQube 搭建代码质量管理平台(一)

来源:东饰资讯网

架构

Architecture

SonarQube 由4部分构成:

  • SonarQube Server

SonarQube Server 会启动3个主要进程:
Web Server:UI 管理界面
Search Server:基于 Elasticsearch 的搜索服务
Compute Engine Server:计算引擎服务,进行代码分析并保存到SonarQube Database

  • SonarQube Database

存储 SonarQube 实例的配置信息,项目、视图等的快照信息

  • SonarQube Scanners

分析项目代码,可在构建/持续集成服务器上运行一个或多个

  • SonarQube Plugins

SonarQube 插件管理

集成

Integration

对代码库中的代码进行分析之前,我们需要搭建持续集成工具(如:Jenkins),并在工具中集成 SonarQube Scanners,根据持续集成工具设置的条件会自动触发拉取和 Build 代码,然后经过 SonarQube Scanners 分析并将分析报告发送到 SonarQube Server,SonarQube Server 对分析报告进行处理并保存到 SonarQube Database,同时可将分析报告发送给相关负责人进行 Review ,最终我们可以通过 UI 界面进行查看分析结果,开发人员对有问题的代码再次进行优化,如此循环。

环境要求

  1. JDK 8
  2. MySQL (>=5.6 && <8.0) (也支持其他数据)

安装 SonarQube Server

  1. 解压后,在 bin 文件夹中选择匹配的操作系统启动 SonarQube server

    # On Windows, execute:
    .\bin\windows-x86-xx\StartSonar.bat
     
    # On other operating system, execute:
    bin/[OS]/sonar.sh console
    
    StartSonar

    从启动日志中可以看出 SonarQube server 依赖于 Elasticsearch,但并不需要单独下载,SonarQube 的下载包内已包含,如果想复用之前安装过的 Elasticsearch,请根据需要调整配置文件 conf/sonar.properties 中 Elasticsearch 部分。

SonarQube UI

配置 SonarQube Database

安装后 MySQL 后,创建数据库 sonar,修改 SonarQube 配置文件 /conf/sonar.properties MySQL相关部分,重启后 sonar 数据库中会创建部分相关的表。

#----- MySQL >=5.6 && <8.0
# Support of MySQL is dropped in Data Center Editions and deprecated in all other editions
# Only InnoDB storage engine is supported (not myISAM).
# Only the bundled driver is supported. It can not be changed.
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
sonar.jdbc.username=root
sonar.jdbc.password=
sonar.sorceEncoding=UTF-8

安装 SonarQube Scanners

对 JavaScript 项目进行代码分析

javascript project

在 sonar-project.properties 添加配置如下:

# Sonar项目标识,在 SonarQube实例下必须唯一
sonar.projectKey=test

# 在 SonarQube UI 中显示的项目名称
sonar.projectName=ApiDoc

# 项目版本
sonar.projectVersion=1.0
 
# 项目代码与 sonar-project.properties 文件的相对路径
sonar.sources=.
 
# 代码文件的编码
sonar.sourceEncoding=UTF-8

# 排除不参与代码分析的文件或目录
sonar.exclusions=node_modules/**/*,.idea/**/*

在项目根目录下执行命令:

sonar-scanner
Analyzed

注意:日志中的 ”Analysis report compressed in 205ms, zip size=518 KB“说明了压缩后的分析报告大小,最终这部分数据会存储到 MySQL,MySQL 默认接受的最大数据包为 4M,如果压缩包过大,这里的提交就会失败,这时候需要修改 MySQL 的 max_allowed_packet 的值。

ApiDoc Result Code Smell

修复掉不规范问题后重新执行命令 sonar-scanner ,结果如下:

ApiDoc Result2

同时在 MySQL 的 sonar 数据库中又会自动创建相关的表,并对分析结果进行存储。

Tables

以上通过对本地目录下的一个 JavaScript 项目进行分析测试,实际情况应该是基于 SCM ,并配合持续集成工具进行自动化代码分析,下篇介绍。

参考链接

Top