SonarQube使用以及集成Jenkins

[TOC]

简介

sonarQube能够提供对代码的一整套检查扫描和分析功能,拥有一套服务器端程序,然后再通过客户端或者别的软件的插件的形式完成对各开发环境和软件的支持。

  • 对编程语言的支持非常广泛,包括C、C++、Java、Objective C、Python、JavaScript、PHP、C#、Swift、Erlang、Groovy等众多语言
  • 提供了对HTML、CSS、JSON、XML、CSV、SQL、JSP/JSF等类型的文档的支持
  • 提供了以FindBugs、PMD、CheckStyle方式执行代码分析和测试检查的功能
  • 登录认证方式支持LDAP、Bitbucket、Azure Active Directory(AAD)、Crowd等方式
  • 提供了优美的3D视图方式下查看代码分析和测试结果报告

工具

sonarQube

SonarQube+Scanner

jdk1.8

Mysql 5.7

安装

下载sonarqube解压,可以在bin目录下找到相关系统的启动执行文件

  • bin 此目录放置各操作系统(LInux、Windows、MacOS)用于启动 SonarQube 服务的工具、脚本;
  • conf 此目录存放SonarQube相关配置文件;
  • data 此目录包含嵌入式数据库(H2数据库引擎)的数据,建议只用于测试和演示;
  • elasticsearch 此目录放置elasticsearch检索引擎相关内容;
  • extensions 此目录存放SonarQube的插件、 扩展jar 包;
  • lib 此目录存放SonarQube所依赖的 jar 包;
  • logs 此目录存放SonarQube相关日志信息;
  • tmp此目录包含服务器所需的临时数据,服务器启动时不要清理;
  • web 此目录存放 SonarQube web 服务的静态资源。

数据库配置

  1. mysql中新建数据库sonarqube

  2. 到conf目录下修改sonar.properties文件

  3. 增加数据库连接信息:

    1
    2
    3
    4
    sonar.jdbc.url=jdbc:mysql://172.16.30.228:3306/qjfsonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
    sonar.jdbc.username=gmsd
    sonar.jdbc.password=gmsdtrade
    sonar.sorceEncoding=UTF-8

启动服务

启动服务前可以先设置服务登录用户,端口默认是9000。

1
2
3
sonar.login=admin
sonar.password=admin
#sonar.web.port=9000

进入bin目录下找到对应系统启动文件,以Windows为例,执行StartSonar.bat。稍微有点慢,因为要初始化数据库信息,.数据库初始化成功后,登录。

数据库增加的表:

汉化

进入官网下载中文插件。

代码质量分析

有三种方式来进行代码分析:

  1. Analyzing with SonarQube Runner
  2. Analyzing with SonarQube Ant Task
  3. Analyzing with Maven

主要讲解第一种方法,其他两种方法可以参考这篇文章,感兴趣可以自行查找资料。

SonarQube Runner适用于所有不同架构的项目,包括没有使用任何源代码管理工具的项目形式,以及使用各种不同代码管理工具(SVN、Git、ClearCase 等)和编译工具(ant,maven)的项目形式,它都能够适用。

需要的工具

1、下载对应版本的 SonarQube+Scanner ,本地解压。修改/conf/sonar-scanner.properties文件。

1
2
3
4
5
6
7
8
9
10
11
12
#Configure here general information about the environment, such as SonarQube server connection details for example
#No information about specific project should appear here

#----- SonarQube 服务器地址
sonar.host.url=http://localhost:9000

#----- Default source code encoding
sonar.sourceEncoding=UTF-8
数据库连接(可以省略)
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonarqube?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
sonar.jdbc.username=root
sonar.jdbc.password=abc123

2、配置环境变量,name=SONAR_RUNNER_HOME。value=D:\sonar\sonar-scanner-3.2,在Path中添加输入%SONAR_RUNNER_HOME%\bin;

打开终端输入:sonar-scanner -version,出现如下内容说明配置成功:3、在需要扫描的项目的根目录下添加sonar-project.properties文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# must be unique in a given SonarQube instance
sonar.projectKey=my:project
# this is the name displayed in the SonarQube UI
sonar.projectName=apiautocore
sonar.projectVersion=1.0
# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
# Since SonarQube 4.2, this property is optional if sonar.modules is set.
# If not set, SonarQube starts looking for source code from the directory containing
# the sonar-project.properties file.
sonar.sources=.
# Encoding of the source code. Default is default system encoding
sonar.sourceEncoding=UTF-8
#语言可以省略,参考sonarqube服务的配置->通用配置的各种语言后缀,python是py
# sonar.language=java
# java文件需要添加
sonar.java.binaries=*/classes

sonar.projectKey需要全局唯一,sonar.source 是用于指定待分析的代码位置的,sonar.projectName是在sonarqube中显示的名称。

4、在项目根目录输入指令:sonar-scanner扫描,再访问sonarqube服务可以查看。

sonarqube平台参数意义

1、质量阈:是一系列对项目指标进行度量的条件。项目必须达到所有条件才能算整体上通过了质量阈。点击导航栏中的质量阀按钮,可更改质量阈的标准。

2、可靠性与安全性:项目中存在的bug或者漏洞

可以选择对应的问题查看

3、异味:是指在代码之中潜在问题的警示信号。并非所有的异味所指示的确实是问题,但是对于大多数异味,均很有必要加以查看,并作出相应的修改。

4、债务:修改所需要的时间

其实分析所有有问题的地方都会有解决问题的时间显示:

5、覆盖率:被测试覆盖的代码的比例。 可以查看单元测试覆盖率。

代码中会有不同颜色表示覆盖情况:

6、重复:代码重复情况

默认质量阈:

1、可维护性:

可维护性的评定标准是项目评级与您的技术债务比率相关。默认的可维护性评级是:

A = 0-0.05,B = 0.06-0.1,C = 0.11-0.20,D = 0.21-0.5,E = 0.51-1

计算方式是按照技术债务比率计算的:

技术债务比率 = 修复软件成本 /(修改一行代码所需要的时间 * 代码总行数)

2、可靠性:

可靠性是指项目错误问题的数量,评级标准:

A = 0错误

B =至少1个小错误

C =至少1个主要错误

D =至少1个严重错误

E =至少1个阻断错误

3、安全性:

漏洞问题的数量,评级标准:

A = 0漏洞

B =至少1个次要漏洞

C =至少1个主要漏洞

D =至少1个严重漏洞

E =至少1个阻断漏洞

4、覆盖率:

5、重复

代码规则

Sonarqube内置了代码规则,用户可以根据对应代码提供的模板自行编辑新的代码规则。

用户与权限

可在配置——>权限——>用户,新建用户。在群组页面可以建立项目群组。将用户划分到某个群组中。

设置权限时可以单独对用户或者对群组设置权限,访问某一项目的分析页面。

项目管理可以批量对项目进行权限划分。

应用市场

下载插件,也可以到官网下载插件放到服务目录下面

令牌

本地或者使用Jenkins等分析代码时,可以使用令牌生成的秘钥登录服务上传项目。

集成Jenkins

安装插件SonarQube Scanner for Jenkins

管理员权限登录Jenkins,选择:系统管理–>插件管理–>可选插件;搜索SonarQube Scanner for Jenkins,勾选,安装后重新启动JenKins。

配置sonar

1、系统管理–>全局工具配置

选择新增SonarQube Scanner添加scanner的路径保存

2、系统设置中添加全局属性

3、设置sonar的服务地址

Server authentication token 可以在sonar服务中获取

填写令牌名称点击生成即可。

4、任务配置

选择第一个

添加jdk版本,填入项目文件中sonar-project.properties的内容

保存构建项目即可。

可以根据Jenkins上点击跳转到SonarQube上查看项目分析结果。

关于单元测试和覆盖率不显示问题

在java项目中增加jacoco插件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<!-- 单元测试覆盖率 -->
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.7.201606060606</version>
<configuration>
<!--指定生成.exec文件的存放位置-->
<destFile>target/coverage-reports/jacoco-unit.exec</destFile>
<!--Jacoco是根据.exec文件生成最终的报告,所以需指定.exec的存放路径-->
<dataFile>target/coverage-reports/jacoco-unit.exec</dataFile>
</configuration>
<executions>
<execution>
<id>jacoco-initialize</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>jacoco-site</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>

properties增加内容或者可不添加

1
2
3
4
5
sonar.java.coveragePlugin=jacoco

sonar.jacoco.reportPaths=./target/coverage-reports/jacoco-unit.exec

sonar.dynamicAnalysis=reuseReports

重新部署即可。

ps:如果用jenkins部署,项目中可以不用添加sonar-project.properties文件,将文件内容写在jenkins中即可。

参考资料:

https://www.ibm.com/developerworks/cn/opensource/os-sonarqube/

http://blog.51cto.com/13538361/2070412

https://www.jianshu.com/p/778fd35fd494

http://www.cnblogs.com/qiumingcheng/p/7253917.html

https://blog.csdn.net/w171066/article/details/52366627

https://blog.csdn.net/lswnew/article/details/79193529

https://blog.csdn.net/t3369/article/details/77977821

单元测试覆盖率

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
显示 Gitment 评论