代码质量管理平台SonarQube安装、配置及集成Jacoco方案

14 篇文章 0 订阅
10 篇文章 0 订阅

目录

1、SonarQube简介

1.1 介绍

1.2 使用范围

1.3 工作原理

1.4 扩展性

2、SonarQube安装、配置

2.1 前置条件

2.2 配置工作

3、Sonar Scanner安装、配置

3.1 配置工作

3.2 运行

4、Jacoco、maven与SonarQube的集成

4.1 前置条件

4.2 配置工作

4.3 运行

5、结束语


1、SonarQube简介

1.1 介绍

       SonarQube是一个用于代码质量管理的开源平台,用于管理源代码的质量。同时  SonarQube 还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用  SonarQube。此外, SonarQube 的插件还可以对 Java 以外的其他编程语言提供支持,对国际化以及报告文档化也有良好的支持。

       官方网址:https://www.sonarqube.org/

1.2 使用范围

       通过插件形式,可以支持包括java,C#,C/C++、PL/SQL、Cobol、JavaScrip、Groovy、Ruby等二十五种编程语言的代码质量管理与检测,针对不同的编程语言其所提供的分析方式也有所不同: 对于所有支持的编程语言,SonarQube 都提供源了代码的静态分析功能; 对于某些特定的编程语言,SonarQube 提供了对编译后代码的静态分析功能。

       SonarQube支持多种客户端集成方式,包括但不限于scanner客户端、ant、gradle、maven、jenkins、idea插件等。比较常用的为gradle和maven。

1.3 工作原理

      SonarQube 并不是简单地将各种质量或覆盖率检测工具的结果(例如 CheckStyle、JACOCO 等)直接展现给客户,而是通过不同的插件算法来对结果进行再加工,并最终以量化的方式来衡量代码质量,从而方便地对不同规模和种类的工程进行相应的代码质量管理,以便进行有针对性的代码修复或重构。

      SonarQube 在进行代码质量管理时,会从以下的七个纬度对项目代码质量进行分析。

SonarQube 7Rules

1.4 扩展性

       Sonar实际上是一个Web系统,展现了静态代码扫描的结果,结果是可以自定义的,而真正实现代码扫描的是Sonar Scanner这个工具,另外同时支持多种语言的原理是它的扩展性,通过插件实现的,也就是Java Jar架包,可以在Sonar平台上在线安装或者离线安装。


2、SonarQube安装、配置

2.1 前置条件

2.1.1 已安装JDK1.8环境

2.1.2 已安装Maven(用于后期与SonarQube、Jacoco的集成)

2.1.3 已安装MySQL数据库(Sonar默认的数据库是自带H2数据库,是很小的嵌入式数据库引擎,这里的配置我换成了MySQL,为了方便通过数据库客户端进行数据查询)

2.2 配置工作

2.2.1 下载SonarQube,地址为http://www.sonarqube.org/downloads/

2.2.2 配置数据库(下面的SQL是指定了schema为sonar,password为sonar,其中第四条SQL是localhost是因为MySQL安装在本地)

mysql -u root -p

mysql> CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci; 
mysql> CREATE USER 'sonar' IDENTIFIED BY 'sonar';
mysql> GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
mysql> GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
mysql> FLUSH PRIVILEGES;

2.2.3 安装SonarQube

I. 将下载的sonar-3.7.zip包解压至Windows某个路径,如D:\Tools\sonar(如是其他OS,请选择对应路径,如Linux的/usr/local/等)。

II. 修改sonar.properties

在<install_directory>/conf/sonar.properties文件中,配置数据库设置(默认已经提供了各类数据库的支持这里使用mysql,因此取消mysql模块的注释),同时因为端口冲突而改成端口为11000。

# User credentials.
# Permissions to create tables, indices and triggers must be granted to JDBC user.
# The schema must be created first.
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar

#----- Embedded Database (default)
# H2 embedded database server listening port, defaults to 9092
#sonar.embeddedDatabase.port=9092

#----- MySQL 5.6 or greater
# 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

# TCP port for incoming HTTP connections. Default value is 9000.
#sonar.web.port=9000
sonar.web.port=11000

III. 在<install_directory>/bin/目录下,运行/windows-x86-64/StartSonar.bat (因为本demo是在win10 64位安装的,如果是Linux的话,运行 nohup bash sonar.sh start &

IV.访问http://localhost:11000,如果不是本机就输入http://[remote IP]:11000,如果你看到下图所示即证明配置成功。

2.2.4 用admin/admin(默认)进行登录,并安装汉化包

Chinese pack installation
Chinese pack restart
Chinese pack restart confirm
Well done!

 


3、Sonar Scanner安装、配置

3.1 配置工作

3.1.1 下载Sonar Scanner,地址为https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner

3.1.2  将下载的sonar-scanner-cli-3.3.0.1492-windows.zip包解压至Windows某个路径,如D:\Tools\sonar(如是其他OS,请选择对应路径,如Linux的/usr/local/等)

3.1.3 修改环境变量

新增变量:SONAR_SCANNER_HOME = D:\Tools\sonar\sonar-scanner-3.3.0

修改Path变量:增添%SONAR_SCANNER_HOME%\bin\

3.1.4 安装Sonar Scanner

I. 将下载的sonar-3.7.zip包解压至Windows某个路径,如D:\Tools\sonar(如是其他OS,请选择对应路径,如Linux的/usr/local/等)。

II. 修改sonnar-scanner.properties

在<install_directory>/conf/sonar-scanner.properties文件中,设置SonarQube服务器。

#Configure here general information about the environment, such as SonarQube server connection details for example
#No information about specific project should appear here

#----- Default SonarQube server
sonar.host.url=http://localhost:11000

III. 到你想检测的工程根目录下新建文件sonar-project.properties,文件内容如下?,文件中的参数配置,参考Sonar Analysis Parameters这篇文章。

#这里的配置转自https://www.jianshu.com/p/e384595d0b14,并进行部分调整,如加进JACOCO参数

# 指定SonarQube instance必须是唯一的
sonar.projectKey=Guns
# 设置SonarQube UI显示的名称 
# PS:有人会问这里的名称是否可以是中文名称,我在网上搜索了好多资料都说是不可以的(至少我看到的资
#料都是)后来自己尝试了一下,答案是可以写成中文的,但是要换一种方式,比如你想把项目名称命名为“测
#试”,那么在这里就要写成“\u6d4b\u8bd5”,那么下面这个参数就应该这样写“sonar.projectName= 
#\u6d4b\u8bd5”,说白了就是将中文转成Unicode
sonar.projectName=Guns
sonar.projectVersion=1.0
sonar.language=java
# 指定src和classes文件夹位置,当然也可以是全路径,如果是当前工程根目录下用“.”表示也可以,比如“sonar.sources=.”
sonar.sources=src/main
sonar.test=src/test
sonar.java.binaries=target
# 下面的这两个参数作用是相同的,因为有时我们需要指定某个文件夹或者忽略某个文件夹
# sonar.inclusions=src1/**,src3/**
# sonar.exclusions=src2/**,src4/**
# 源码编码,默认是系统编码
sonar.sourceEncoding=UTF-8
# Set jacoco Configuration
# 指定代码覆盖率工具
sonar.core.codeCoveragePlugin=jacoco
# 指定exec二进制文件存放路径
#sonar.jacoco.reportPaths=[yourPath/]jacoco.exec
#本demo之前设置的exec文件是在工程根目录下的target/coverage-reports下:
sonar.jacoco.reportPaths=target/coverage-reports/jacoco-unit.exec
# 以下属性可选择性加,当然也可以不加
sonar.dynamicAnalysis=reuseReports
sonar.jacoco.reportMissing.force.zero=false

3.2 运行

在命令行模式下,在工程的根目录下键入命令“sonar-scanner”,你会看到以下日志:

运行sonar-scanner

接着,重新登录SonarQube平台,检测的结果已经在平台上展现出来

       从上图你可以看出来,连单元测试覆盖率的统计也生成出来了,主要原因为在该maven项目之前已经集成了Jacoco插件(具体Maven与Jacoco的集成请参考我的另外一篇文章)。


4、Jacoco、maven与SonarQube的集成

4.1 前置条件

4.1.1 该项目为maven项目,并且Jacoco已经通过POM文件集成到项目中,具体步骤请参考我的另外一篇文章。

4.1.2 该集成方案其实还是首先通过maven package 命令去生成对应的覆盖率报告,然后通过sonar scanner直接使用该覆盖率报告并通过一定算法加工并展示到SonarQube的界面上去。

4.2 配置工作

4.2.1 在项目根目录的sonar-project.properties文件中,增添以下配置内容:

# 指定代码覆盖率工具
sonar.core.codeCoveragePlugin=jacoco
# 指定exec二进制文件存放路径
#sonar.jacoco.reportPaths=[Your path]/jacoco.exec
#本demo之前设置的exec文件是在工程根目录下的target/coverage-reports下:
sonar.jacoco.reportPaths=target/coverage-reports/jacoco-unit.exec
# 以下属性可选择性加,当然也可以不加
sonar.dynamicAnalysis=reuseReports
sonar.jacoco.reportMissing.force.zero=false

4.2.2 在SoarQube登录admin,并通过在【配置-应用市场】下找到Jacoco插件并安装和重启。

4.3 运行

4.3.1 在项目根目录下,运行 mvn package,当build成功的时候Jacoco的结果就会产生在target/site/jacoco文件夹下。

maven package

4.3.2 接着,在项目根目录下运行命令 sonar-scanner,如果看到以下结果证明已经覆盖率已经可以在SonarQube上查阅。

sonar scanner

 


5、结束语

下一篇会继续补充如何通过SonarLint整合到IntelliJ IDEA,并同时如何整合到Jenkins实现自动化测试。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值