SonarQube


前言

随着项目团队规模日益壮大,项目代码量也越来越多。且不说团队成员编码水平层次不齐,即便是老手,也难免因为代码量的增加和任务的繁重而忽略代码的质量,最终的问题便是bug的增多和代码债务的堆积。

因此,代码review便日益提上了日程。当然人工review的效率还是相当低下的,于是我们采用了自动化代码review的工具,便是今天的主角:SonarQube。

SonarQube简介

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

SonarQube 是一个用于管理源代码质量开放平台,它可以从多个维度检测代码质量,可以快速的定位代码中潜在的或者明显的 Bug、错误。

它支持包括 Java、Python、Php、C/C++、C#、HTML、JavaScript、PL/SQL、Objective C 等二十多种编程语言的代码质量管理与检测。可作为我们日常开发中检测代码质量的重要工具。

SonarQube? 可以与您现有的工作流程集成,以便在项目分支和拉取请求之间进行连续的代码检查。比如:

  • SonarQube集成gitlab,在分支推送的时候自动进行代码检查分析,生成代码报告。
  • SonarQube集成jenkins,在代码构建的时候自动进行代码分析,生成代码报告。

总之,SonarQube是可以配合一切好用的CI/CD工具进行自动化分析代码并生成代码报告,通过报告我们可以看到代码中可能存在的bug和代码债务。

环境、软件准备

以下是安装的软件及版本:

  • 服务器:CentOS7
  • SonarQube:version 7.7
  • Jdk:version 1.8.0_91
  • Maven:version 3.5.3
  • Mysql: version 5.7.15

注意:下边我们要演示 Maven 项目如何使用 SonarQube 分析,所以需要先安装 Maven、Jdk,SonarQube 安装我们使用 Mysql 作为数据存储,所以需要先安装 Mysql,这里 Maven、Jdk、Mysql 的安装忽略。

SonarQube安装

本文下载的版本是Sonarqube-7.7

下载地址:https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.7.zip

SonarQube 的安装包是不分平台的,默认把所有平台的运行命令都下载下来,使用者根据不同环境运行不同的运行脚本。

1、下载SonarQube安装包
[root@Zabbix ~]# wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.7.zip

2、解压SonarQube安装包

[root@Zabbix ~]# unzip sonarqube-7.7.zip
[root@Zabbix ~]# mv sonarqube-7.7 /usr/local/sonarqube
  • bin:目录存放了各个环境的启动脚本
  • conf:目录存放着sonarqube的配置文件
  • logs:目录存放着启动和运行时的日志文件
  • data:用来存放数据,SonarQube默认使用 h2 数据库存储,同时支持其他如Mysql、Orace、Mssql、Postgresql数据库存储

3、配置SonarQube

# 我们首先需要通过配置文件修改sonarqube的Mysql连接字符串等信息,打开conf目录的sonar.properties

[root@Zabbix ~]# vim /usr/local/sonarqube/conf/sonar.properties

端口的配置按照默认配置:

sonar.web.port=9000
sonar.search.port=9001

配置数据库信息:

sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:mysql://MYSQLSERVER_IP:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true

注:Mysql版本需大于或等于5.6且小于8.0

4、创建数据库及授权

mysql> create database sonarqube;
mysql> grant all on sonarqube.* to sonarqube@'%' identified by '123456';
mysql> flush privileges;

5、启动SonarQube

启动需要授权给一个非root的用户,sonarqube及其es等软件禁止root账户启动,因此需要切换一个非root账户,授权的用户需要有bin目录及其子目录的读取和可执行的权限。

然后我们找到对应平台的脚本,我的系统是64位的linux,进入linux-x86-64目录

# 授权

[root@Zabbix ~]# chown -R admin.admin /usr/local/sonarqube

# 启动

[root@Zabbix ~]# su - admin
[admin@Zabbix ~]$ /usr/local/sonarqube/bin/linux-x86-64/sonar.sh start

# 查询端口

[admin@Zabbix ~]$ netstat -lntup

# 启动之后,我们浏览器访问对应服务器IP地址的9000端口(防火墙要提前放行9000端口)

如果没有成功,那么就在logs目录查看启动日志。一般有几种:

  • 1)es.log         # ES或Mysql等数据库连接报错,一般是Mysql的连接字符串账号密码错误或者sonar账号权限不够;
  • 2)es.log         # 数据库初始化失败MySQL sonar账户权限不足
  • 3)sonar.log    # sonar服务的启动日志
  • 4)web.log      # sonarqube web的启动日志

6、访问SonarQube

# 默认账号密码admin

# 登录后界面

7、Plugins 插件安装

SonarQube 插件安装非常简单,同时 官网插件库 提供了很多实用的插件供大家下载使用。SonarQube已经默认给我们安装了一些很常用的插件,我们可以通过admin登录,点击 配置 -> 系统 -> 更新中心 -> Installed 查看。

SonarQube 支持分析的语言有很多,像Java、Python、Php、C/C++、C#、HTML、JavaScript、PL/SQL、Objective C等20+语言,当我们需要支持分析什么语言时,只需要去插件中心安装对应语言的插件即可,非常方便,可扩展性强。

这里我们演示安装两个很实用的插件,一个是 Chinese Pack(SonarQube的汉化包),一个是 Checkstyle(检测代码风格)。

# Chinese Pack 插件安装

登陆之后点击administration:

安装完之后看页面上边:

之后再次登陆就更新了:

# Checkstyle 插件安装

在 SonarQube 网页上直接点击安装。admin 登录,点击 配置 -> 系统 -> 更新中心 -> Available -> Search,输入 CheckStyle,

在搜素结果中找到 CheckStyle 插件点击 Install,等待下载完成后,按照页面提示点击 Restart 自动重启服务即可完成安装。

SonarQube分析Maven项目

1、在maven的中找到setting配置文件。在setting.xml中增加sonarqube配置。如下:


    
        org.sonarsource.scanner.maven
    
    
        
            sonar
            
                true
            
            
                
                http://myserver:9000/sonar/
          7895sdf8594sdfs65ewfds9854seese65

2、然后就可以在我们 Maven 工程目录执行:

mvn clean verify sonar:sonar 或 mvn clean install sonar:sonar

注:如果是使用jenkins和maven编译,还可在jenkins上具体项目中的构建中配置:

clean verify sonar:sonar -Dsonar.projectVersion=$appVersion -Dsonar.projectKey=ups_sas

3、执行完毕之后,可以去 web页面查看分析结果:

http://myserver:9000/sonar/

SonarQube与Jenkins集成

1.   安装Jenkins

这里不介绍。

2.  安装SonarQube Scanner插件

2.1.  安装插件

https://plugins.jenkins.io/sonar

 

安装完后重启jenkins。

2.2.  配置SonarQube

首先,在SonarQube中生成一个Token(PS:用token代替输入用户名和密码):

然后,在Jenkins中配置连接sonarqube服务器的地址,这里用到的token就是刚才在sonarqube中创建的那个token:

最后,配置全局工具配置:

3.  创建任务

最最重要的是,配置SonarQube analysis properties

sonar.projectKey=ks-cms-unicorn
sonar.projectName=ks-cms-unicorn
sonar.projectVersion=1.0

sonar.language=java
sonar.sourceEncoding=UTF-8

sonar.sources=$WORKSPACE
sonar.java.binaries=$WORKSPACE

本例中,创建了两个任务,方法同上。

 

可以看到,每次构建任务都会生成一次报告。这种方式比Maven那种方式要好很多,在实际的项目中多用此方式。

引用:

  • https://www.yangxingzhen.com/7262.html
  • https://www.cnblogs.com/cjsblog/p/10740840.html