【质量前移】代码质量管理平台SonarQube环境搭建

一、背景

如图所示,如果把质量问题与风险控制在研发期,解决bug修复的成本相比于在Production阶段再修复会大幅降低,这也就质量前移的基本思想。

image

如果一开始就写出优质的、经过测试的代码,那么后面测试阶段就会减少很多不必要的时间浪费,反之,如果把全部的质量责任交给测试工程师,则可能会导致:

  • 交付周期延长
  • 测试不充分,风险抛给用户
  • 不利于代码后期重构

如果一味地追求所谓的交付时间,很容易产生大量的“烂代码”,这些代码逻辑混乱、复杂度高、易读性差、没有测试或缺乏必要的注释。如果研发工程师把这些代码提测,那么势必会导致很多的低级错误,甚至无法正常运行,然后测试人员打回修规,那么势必浪费很多时间,延误测试与上线时间。

基于这种考虑,金融测试组制定了code review+静态扫描+自动化单元测试+代码覆盖率检测的标准,以保证提测质量,把问题与风险控制在前期。

其中的静态扫描,金融测试组采用了SonarCube+SonarScanner工具。SonarQube可以集成研发常用的FindBugs、PMD、CheckStyle等工具,且提供了统一的数据展示页面,支持分布式代码扫描。SonarQube通过安装插件的方式来扩展对各种语言的支持,比如Java、C++、Python、PHP、JS等。

二、环境准备

依赖软件

数据库准备

1、设置默认编码格式

/etc/my.cnf中,设置:

character_set_server=utf8  
init_connect='SET NAMES utf8'

2、创建sonar数据库及sonar用户于权限

➯ 创建数据库:
    CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
➯ 创建SonarQube Server访问数据库的用户:
    CREATE USER 'sonar' IDENTIFIED BY 'sonar';
➯ 配置SonarQube Server访问数据库用户的权限
    GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
    GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
➯ 更新权限:flush privileges;

用户权限准备

因SonarQube 6.7.2中包含了ElasticSearch,且ES不支持root权限运行,因此要创建sonar用户与其对目录的权限:

➯ 创建用户及用户组
useradd sonar
➯ 设置用户的密码
passwd  sonar

三、SonarQube安装

配置SonarQube

我一般将此类软件会放在自建目录/application下,首先如上文所说,需要给sonar用户赋予对/application/sonarqube-6.7.2的权限,使自己能以普通用户身份能启动ES:

1、设置目录权限

➯ 设置目录的owner
chown -R sonar /application/sonarqube-6.7.2/
➯ 设置目录执行权限
chmod 777 /application/sonarqube-6.7.2/

image

2、编辑SonarQube配置文件

配置/application/sonarqube-6.7.2/conf/sonar.properties
image

image

image

1.3、启动服务

启动文件在/application/sonarqube-6.7.2/bin/linux-x86-64/sonar.sh的脚本,一定要以普通用户启动服务,否则es会报错:

启动:su sonar /application/sonarqube-6.7.2/bin/linux-x86-64/sonar.sh start
重启:su sonar /application/sonarqube-6.7.2/bin/linux-x86-64/sonar.sh restart
关闭:su sonar /application/sonarqube-6.7.2/bin/linux-x86-64/sonar.sh stop

检查端口是否开启:
image

1.4、Log查询

所有的log会记录在/application/sonarqube-6.7.2/log下,其中

[root@localhost logs]# tree
.
├── access.log
├── ce.log
├── es.log                     //es的log
├── sonar.log                //sonar本身的log
└── web.log                 //web页面的log

0 directories, 5 files

支持,SonarQube启动成功。

四、SonarQube的使用

1、登陆Web端

在浏览器输入 http://IP:PORT
image

* 2、安装中文Pack *

找到配置-应用市场-Chinese Pack。
image
注:应用市场可以安装各类插件,包括其他语言的支持(Java、PHP、C++等)与一些常用,件(FindBugs、TFVC等),安装目录在/application/sonarqube-6.7.2/extensions/plugins,可以自己手动安装。

五、安装SonarScanner

1、下载

SonarScanner

2、安装

将包解压后放入/usr/local/sonar-scanner

3、配置

vim /usr/local/sonar-scanner/conf/sonar-scanner.properties

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

#----- Default SonarQube server
➯ SonarQube的地址
sonar.host.url=http://10.129.192.94:9000

#----- Default source code encoding
#sonar.sourceEncoding=UTF-8

➯ 项目的唯一key
sonar.projectKey=duoqi:trade
➯ 项目的名字,会展示在web页面中
sonar.projectName=duoqi_trade
➯ 项目的版本
sonar.projectVersion=1.0
➯ 项目的语言
sonar.language=java
➯需要分析的源码的目录,多个目录用英文逗号隔开
sonar.sources=\application\paydayloan\src
➯项目的编码格式
sonar.sourceEncoding=UTF-8

* 4、执行*

在代码目录下,执行sonarscanner,扫描的结果会出现在SonarQube中:

cd /application/paydayloan/develop
/usr/local/sonar-scanner/bin/sonar-scanner

5、新版SonarQube报错解决

我在首次执行后,出现了如下问题:

ERROR: Error during SonarQube Scanner execution
org.sonar.squidbridge.api.AnalysisException: Please provide compiled classes of your project with sonar.java.binaries property

经过google,发现的原因是SonarJava的版本太高了。

下载老版的jar包:
link

替换/application/sonarqube-6.7.2/extensions/plugins/的文件,再次执行,成功。

六、执行结果

执行结果展示了代码bug、漏洞、一般性问题、单测覆盖率、重复代码等数据,并且有具体的问题描述,如下图。
image

image

猜你喜欢

转载自blog.csdn.net/hbmovie/article/details/80940639