SonarQub e 与 J enkin s 简 介
SonarQub e 是 一个开源的代码质量分析平台,便于管理代码的质量,可检查出项目代码的漏洞和潜在的逻辑问题。同时,它提供了丰富的插件,支持多种语言的检测, 如 J ava、Python、Groovy、C、C++等几十种编程语言的检测。它主要的核心价值体现在如下几个方面:
- 检查代码是否遵循编程标准:如命名规范,编写的规范等。
- 检查设计存在的潜在缺陷:SonarQub e 通 过插 件 F indbugs、Checkstyl e 等 工具检测代码存在的缺陷。
- 检测代码的重复代码量:SonarQub e 可 以展示项目中存在大量复制粘贴的代码。
- 检测代码中注释的程度:源码注释过多或者太少都不好,影响程序的可读可理解性。
- 检测代码中包、类之间的关系:分析类之间的关系是否合理,复杂度情况。
SonarQub e 平 台是 由 4 个 部分组成:
- SonarQube Server
- SonarQube Database
- SonarQube Plugins
- SonarQube Scanner
SonarQube 与 SonarQube-Scanner 的安装与配置
SonarQube
在 S onarQub e 官 网,我们可以下载最新 的 S ona r 安 装包,本节 以 L inu x 系 统为例,搭 建 S onarQub e 平 台,解压到任意目录,如:unzip sonarqube5.6.zip。
SonarQub e 自带了一个 H2 的数据库,当然为了获得更好的性能我们可以指定一个外部的数据库,在这里我们使用 MySQL 数据库。 先 在 M ysq l 数 据库中建立一 个 S ona r 数 据库,主要用于存放分析结果的数据,如 图 1 :
图 1. 创建 MySQL 数据库
![](https://i-blog.csdnimg.cn/blog_migrate/689d533bcf898d40626c1c8120966fdf.png)
进入解压 的 S onarQue b 目 录,在系统路径里面配 好 p ath,配置如下:
1
2
3
4
5
|
#sonar profile
export
SONAR_HOME=/usr/local/sonarqube-5.6.1
export
PATH=${SONAR_HOME}/bin:${PATH}
|
并修改配置文 件 s onar.properties,如下:
1
2
3
4
5
6
7
|
# sonar.jdbc.username=root
#sonar.jdbc.password=root
#sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?
useUnicode=true&characterEncoding=
utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
#option properties
sonar.jdbc.driverClassName:com.mysql.jdbc.Driver
|
基本配置完成,在命令行启 动 S onarQube:进 入 S onarQub e 安 装目录,进 入 b i n 目 录,运行 ./sonar.sh start, 打 开 h ttp://localhost:9000,如果显 示 S onarQub e 主 页, 则 S onarQub e 安 装成功。如 图 2。
图 2. SonarQube 启动页面
![](https://i-blog.csdnimg.cn/blog_migrate/0809e221370a5aaf5c9cdc94f80bc685.png)
如果需要关 闭 S onarQube,则执行 ./sonar.sh stop
如果需要重 启 S onarQube,则执行 ./sonar.sh restart
SonarQube Scanner
下 载 S onar-Scanner-2.6.1,解压到目录(可解压到任意目录)。修改系统路 径 p ath,如下:
1
2
3
4
5
|
#sonar-scanner profile
export
SONAR_SCANNER_HOME=/usr/local/sonar-scanner-2.6.1
export
PATH=${SONAR_SCANNER_HOME}/bin:${PATH}
|
修 改 c on f 目 录的配置文 件 s onar-scanner.properties,具体如下:
1
2
3
4
5
6
7
8
|
sonar.jdbc.username=root
sonar.jdbc.password=root
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode
=true&characterEncoding=utf8&rewriteBatchedStatements=true&
useConfigs=maxPerformance
sonar.sourceEncoding=UTF-8
sonar.login=admin
sonar.password=admin
|
在命令行中执行 sonar-runner -h 如果显示以下内容,则安装成功。 如图 3。
图 3. Sonar-Runner
![](https://i-blog.csdnimg.cn/blog_migrate/5de67f590f60f3bd6bd6b8690e7d6761.png)
Jenkins 与 SonarQube 集成插件的安装与配置
Jenkins 是一个支持自动化框架的服务器,我们这里不做详细介绍。Jenkins 提供了相关的插件,使得 SonarQube 可以很容易地集成 。 登陆 jenkins,点击"系统管理",如图 4。
图 3. Jenkins 系统管理
![](https://i-blog.csdnimg.cn/blog_migrate/6507cd752ac8213587a3167cd01a6926.png)
点击管理插件,如图 4。
图 4. Jenkins 管理插件
![](https://i-blog.csdnimg.cn/blog_migrate/328c5f62a01d6490fee7bf7e0d837c46.png)
在可选插件中搜索"SonarQube"并安装它,如图 5。
图 5. Jenkins 安装 SonarQube 插件
![](https://i-blog.csdnimg.cn/blog_migrate/764dc1d2717c3b09d0b25ec51665567c.png)
进入 Jenkins 系统管理 – 系统设置,配置 SonarQube Server 信息,如图 6。
图 6. Jenkis 配置 SonarQube Server
![](https://i-blog.csdnimg.cn/blog_migrate/3276bfbbe641ae71d1c3f5218344194c.png)
进入 Jenkins 系统管理 - Global Tool Configuration,配置 SonarQube Scanner,如图 7。
图 7. Jenkis 配置 SonarQube Scanner
![](https://i-blog.csdnimg.cn/blog_migrate/0aa301f939b904ea1759d94911f7c441.png)
新建 Jenkins 项目
登陆 Jenkins 平台,点击新建,如图 8。
图 8. 新建 Jenkis 项目
![](https://i-blog.csdnimg.cn/blog_migrate/a7ad2426535076af451f3476e3e7f5f7.png)
这里有两种方法使用 SonarQube Scanner 进行代码分析,第一种是使用构建后步骤,第二种是在构建的过程中增加 SonarQube Scanner 的步骤,下面我们来分别介绍这两种方法。
在 Jenkins 项目中使用构建后步骤进行代码分析
使用构建后步骤进行代码分析需要使用 Maven 对代码进行编译,所以需要有 Maven 的配置文件,例如 pom.xml。
为新建的 Jenkins 项目配置构建后操作步骤,在构建后步骤配置窗口中需要填入 Maven 的构建配置 xml 文件,如图 9、10。
图 9. 新建构建后操作步骤
![](https://i-blog.csdnimg.cn/blog_migrate/b15f193f1276c45c4101ba2bf5f69508.png)
图 10. 配置构建后操作步骤
![](https://i-blog.csdnimg.cn/blog_migrate/594b439f55f3980a6f32476dba049aac.png)
在 Jenkins 项目构建过程中加入 SonarScanner 进行代码分析
首先需要在新建的 Jenkins 项目的构建环境标签页中勾选"Prepare SonarQube Scanner evironment",如图 11。
图 11. 配置构建后操作步骤
![](https://i-blog.csdnimg.cn/blog_migrate/3bb02f7007036487d0823b05f5dac207.png)
增加构建步骤"Execute SonarQube Scanner",如图 12。
图 12. 增加 Execute SonarQube Scanner 构建步骤
![](https://i-blog.csdnimg.cn/blog_migrate/4fef0a77d33cc95055e93a352234c132.png)
配置 SonarQube Scanner 构建步骤,在 Task to run 输入框中输入 scan,即分析代码;在 JDK 选择框中选择 SonarQube Scanner 使用的 JDK(注意这里必须是 JDK 不能是 JRE);Path to project properties 是可选择的输入框,这里可以指定一个 sonar-project.properties 文件,如果不指定的话会使用项目默认的 properties 文件;Analysis properties 输入框,这里需要输入一些配置参数用来传递给 SonarQube,这里的参数优先级高于 sonar-project.properties 文件里面的参数,所以可以在这里来配置所有的参数以替代 sonar-project.properties 文件,下面列出了一些参数,sonar.language 指定了要分析的开发语言(特定的开发语言对应了特定的规则),sonar.sources 定义了需要分析的源代码位置(示例中的$WORKSPACE 所指示的是当前 Jenkins 项目的目录),sonar.java.binaries 定义了需要分析代码的编译后 class 文件位置;Additional arguments 输入框中可以输入一些附加的参数,示例中的-X 意思是进入 SonarQube Scanner 的 Debug 模式,这样会输出更多的日志信息;JVM Options 可以输入在执行 SonarQube Scanner 是需要的 JVM 参数。如图 13。
1
2
3
4
5
6
|
sonar.projectKey=testSonar
sonar.projectName=testSonar
sonar.projectVersion=1.0
sonar.language=java
sonar.java.binaries=$WORKSPACE/testSonar/target/test-classes/
sonar.sources=$WORKSPACE/testSonar/src
|
图 13. 配置 Execute SonarQube Scanner 构建步骤
![](https://i-blog.csdnimg.cn/blog_migrate/9e0b154dafa3c049b25171756cbe1c06.png)
查看分析结果
在新建的 Jenkins 项目的构建的 Console Output 中可以得到 SonarQube 分析结果的链接,如图 1。
图 . Jenkins 项目构建结果
![](https://i-blog.csdnimg.cn/blog_migrate/807d4d0a7d9ae3af0377ff40b8e87bac.png)
打开构建结果的链接来查看具体的分析报告,如 图 1 2。
图 12. 分析结果报告
![](https://i-blog.csdnimg.cn/blog_migrate/9036a5f3a4b4b69d904f180cb51d7517.png)
点击质量阈图标以查看具体的问题,如 图 1 3、14。
图 13. 具体问题展示
![](https://i-blog.csdnimg.cn/blog_migrate/8e849ff23bbafaa955db93d76cee448b.png)
图 14. 具体问题展示
![](https://i-blog.csdnimg.cn/blog_migrate/f4913f5d8110780be3e40cba61cf6c2b.png)