介绍篇
SonarQube 介绍
SonarQube 是 一个开源的代码质量分析平台,便于管理代码的质量,可检查出项目代码的漏洞和潜在的逻辑问题。同时,它提供了丰富的插件,支持多种语言的检测,
如 Java、Python、Groovy、C、C++等几十种编程语言的检测。它主要的核心价值体现在如下几个方面:
- 检查代码是否遵循编程标准:如命名规范,编写的规范等。
- 检查设计存在的潜在缺陷:SonarQube 通过插件 Findbugs、Checkstyle 等工具检测代码存在的缺陷。
- 检测代码的重复代码量:SonarQube 可以展示项目中存在大量复制粘贴的代码。
- 检测代码中注释的程度:源码注释过多或者太少都不好,影响程序的可读可理解性。
- 检测代码中包、类之间的关系:分析类之间的关系是否合理,复杂度情况。
SonarQube 平台是由 4 个部分组成:
- SonarQube Server
- SonarQube Database
- SonarQube Plugins
- SonarQube Scanner
SonarQube 工作流程
SonarQube 在进行代码质量管理时,会从下图 所示的七个纬度来分析项目的质量。
SonarQube 需要数据库的支持,用于存储检测项目后的分析数据,同时为了实现可持续监测,还需要持续集成工具(如Jenkins)的支持,在构建版本前,通过Jenkins+Sonar 插件执行项目分析指令,最终的结果会通过SonarQube 服务器的Web 页面展示。下图是使用SonarQube做代码持续审查的流程图:
开发人员把代码push到SCM(如gitlab)【上图第2步】,jenkins构建定义好的job,然后通过jenkins 插件(sonar scanner)分析源码【上图第3步】,jenkins把分析报告发到sonarqube server【上图第4步】。
安装篇
环境准备
- Sonarqube 5.5
- Sonarqube Scanner 2.4
- MySQL 5.6
- jenkins 2.53
- JDK 1.7.0_79
- CentOS release 6.5 (Final) 2.6.32-431.el6.x86_64
版本说明:
- sonarqube5.6+ 必须要JDK1.8,所以JDK1.7下只能安装sonar5.5 .
- sonar scanner 2.5+后也要使用JDK1.8,所以JDK1.7下就要用scanner 2.4。
- 为安全起见,sonar的安装和启动不用root用户,而是用低权限的linux用户。
SonarQube安装
1、数据库配置
MySQL的安装这里不作介绍。并且本示例MySQL和SonarQube安装在同一台机器
创建SonarQube 服务所需的数据库:
mysql> CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
mysql> CREATE USER 'sonar' IDENTIFIED BY 'sonarpassword';
mysql> GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonarpassword';
mysql> GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonarpassword';
mysql> FLUSH PRIVILEGES;
2、SonarQube配置
下载 SonarQube5.5 后解压。按如下配置修改 $SONAR_HOME/conf/sonar.properties
文件:
sonar.jdbc.username=sonar
sonar.jdbc.password=sonarpassword
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
sonar.web.host=0.0.0.0
sonar.web.context=/
sonar.web.port=9000
3、启动SonarQube
进入sonar的bin目录($SONAR_HOME/bin/linux-x86-64
),执行脚本 sonar.sh start
浏览器中访问 http://192.168.212.82:9000/ ,界面如下:
默认登录账户 admin 密码 admin,可登录后修改密码。
3.A 配置sonarqube开机启动
(1)添加sonar环境变量
修改 ~/.bash_profile
SONAR_HOME=/data/sonar/sonarqube-5.5
PATH=PATH:$SONAR_HOME/bin/linux-x86-64
export PATH SONAR_HOME
(2)/etc/init.d 下增加sonar 文件
#!/bin/sh
# chkconfig: 345 96 10
# description: SonarQube system
#
# Provides: sonar
# Default-Start: 3 4 5
# Default-Stop: 0 1 2 6
# Short-Description: SonarQube system
# Description: SonarQube system
/usr/bin/sonar $*
(3)加入开机启动列表
sudo ln -s $SONAR_HOME/bin/linux-x86-64/sonar.sh /usr/bin/sonar
sudo chmod 755 /etc/init.d/sonar
sudo chkconfig --add sonar
4、汉化
下载 sonarqube5.5 汉化包 ,是个jar包,放到$SONAR_HOME/extensions/plugins
,重启sonarqube (sonar.sh restart)
Jenkins集成SonarQube Scanner
安装 SonarQube Scanner插件
jenkins界面 系统管理->管理插件->高级 ,手动上传hpi插件(因自动安装scanner插件是大于2.4版本,要求JDK1.8,所以这里手动安装)
先下载 SonarQube Scanner 2.4 for Jenkins ,再上传。安装后重启jenkins。成功安装后展示如下:
配置SonarQube Server
告诉Jenkins: SonarQube Server在哪
Jenkins 系统管理 -> 系统设置:
其中Server authentication token 是sonarqube Server的登录凭证,在SonarQube后台生成。只需登录到sonarqube,创建一个用户token:
添加Jenkins全局配置 - SonarQube Scanner
Jenkins 系统管理->全局配置(Global Tool Configuration)
选择自动安装, Install from Maven Central ,sonarqube Scanner 2.4版本。
使用篇
使用SonarQube Scanner 分析源码
这里采取构建后分析源码
Analysis properties 填写配置
- sonar.projectKey=apigateway
- sonar.projectName=apigateway #这个可自定义,报告发送到sonarqube后,sonarqube将创建以此命名的project
- sonar.language=java #表示分析java源代码
- sonar.java.source=1.7 #表示jdk版本为1.7
- sonar.sources=${WORKSPACE}/src/main/java #表示源代码的目录
查看分析结果
构建jenkins job后,分析结果将发送到sonarqube。
jenkins job构建结果
sonarqube 分析结果
小结
本文介绍了sonarqube的安装、配置,以及结合jenkins来做持续的自动CodeReview。其中的安装配置过程都是笔者亲自试验过的,可供读者在参考。安装配置时需注意各个软件的版本。如果跟本文的版本有差异,安装过程也会不尽相同。