在上篇文章《【代码审计】使用SonarQube进行代码质量分析管理 》中,我们说明了项目代码质量的重要性,以及当前代码质量分析管理的一些工具,然后详细说明了SonarQube质量分析管理工具的安装部署和代码扫描分析的过程。上文我们说到SonarQube是使用自己默认的内置的数据库,在一些功能上会受到限制,本文我们将内置存储改为外置mysql存储,然后在分析项目代码,对项目代码严重性地方进行修复工作,然后介绍SonarQube其他的一些基本的使用(设置、插件安装等)
一、准备工作
1.代码分析管理平台SonarQube(已部署)
2.mysql数据库服务5.6-5.7
二、配置外部数据存储
1.配置SonarQube数据服务
打开我们上文安装的SonarQube的根目录,然后进入conf目录,修改sonar.properties文件
sonar.jdbc.url=jdbc:mysql://maxbill:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
参数说明:
sonar.jdbc.url 数据库连接地址
sonar.jdbc.username 数据库用户名
sonar.jdbc.password 数据库密码
我们在数据库中创建sonar数据库,并设置授权
CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER 'sonar' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
FLUSH PRIVILEGES;
2.验证配置
启动sonarqube服务,初始化数据库信息(使用上文我们编写的启动脚本)
此刻,SonarQube已经启动成功,我们访问http://127.0.0.1:9000,发现访问不到页面
此时我们只能去看sonar的日志,定位到sonar的log目录下,找到web.log文件
从日志中我们明显的看到以下错误,该版本的必须使用mysql5.6及以上版本:
2018.05.23 11:10:49 ERROR web[][o.s.s.p.Platform] Web server startup failed: Unsupported
mysql version: 5.5. Minimal supported version is 5.6.
3.解决mysql版本低的问题
经过查询sonar的日志,我们知道使我们的mysql版本低导致的运行初始化异常,我们升级mysql到6.0(备注:我主机上刚好有6.0的包,只要升级到6.0及以上就行),升级过程忽略,大家可自行百度,或者 重新卸载安装也是可以的
此时我们重启sonarqube,访问http://127.0.0.1:9000
结果还是报错:
报Unknown character set: 'utf8mb4'异常,查找了许多资料,以为mysql6.0版本不支持,最后发现不是mysql的问题,而是mysql驱动引起的问题。将mysql驱动改成 mysql-connector-java-5.1.6-bin.jar
本以为就完美解决了,天公不作美,又有新问题了,启动访问不到,继续看日志
查了N多的资料,没找到解决办法,看日志应该是7.1版本的BUG(最新的版本),于是下载6.7.3版本部署后,重复上面的配置步骤,启动访问http://127.0.0.1:9000 还是访问不到,看日志如上的异常信息,于是排除sonarqube版本问题,怀疑是mysql版本导致,果断卸载mysql6.0重新安装mysql5.6版本,然后重新启动程序,访问http://127.0.0.1:9000 ,我们看到程序在进行数据初始化,如下:
我们使用客户端连接mysql数据库看看表中数据:
注意:后面又切回SonarQube7.1也是正常的,所以大家注意下最好使用mysql5.6-5.7版本
此时我们可以看到使用了外置的mysql数据库后,这里的警告提示消失了
4.配置Scanner扫描工具
打开我们上文安装的Scanner的根目录,然后进入conf目录,修改sonar-scanner.properties文件
sonar.jdbc.url=jdbc:mysql://maxbill:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
三、使用SonarScanner扫描分析项目代码
由于我们使用了外置的数据库之前扫描分析的信息就丢失了,我们使用scanner重新扫描分析项目代码进入我们要扫描的项目的更目录下面,运行终端执行sonar-scanner
等待项目被扫描分析完成
扫描分析完成我们登陆SonarQube代码分析管理平台等待分析结果
稍等一会就分析完成了,我们可以看待项目分析的详情:
四、在SonarQube代码分析管理平台解决代码问题
我们在项目代码分析详情中点击问题标签,可以看到项目列出来的不同级别的问题列表
我们点击右侧阻断性的问题(最严重,必须要改的)
我们点击一个进入,可以看到错误的代码块位置,以及系统的改错提示
在这里可以去修复这个问题,也可以去修改这个问题的级别,可以评论,可以给该问题打上标签,可以将该问题分配给该项目其他成员
五、其他功能介绍
1.插件安装
系统默认是英文,可以安装中文插件(本文已安装)
插件市场中我们可以安装、卸载、更新插件,当然也可以去github下载第三方开发的插件安装
2.系统日志
在这里我们可以查看系统、web、引擎的基本信息、改动日志级别、下载系统信息、下载日志信息、在线重启SonarQube数据管理系统
3.权限控制
在权限控制中,可以管理系统的用户(新增、删除、禁用、修改密码、分配组、查看详情)、管理系统群组(创建、删除、更新、管理群组中人员)、给用户或者群组分配系统功能操作权限、配置权限模板等
4.代码规则
在这里可以配置各种语言的代码分析规则(可以配置自定义的规则)
5.质量配置
在质量配置中可以自定义不同语言系统分析代码质量使用的质量阀值(影响代码分析结果)
六、总结
本文中踩了不少的坑,主要还是sonar和mysql的版本兼容性问题,这里也再次提醒大家(按照sonar的配置文件提示使用mysql版本,sonar7.1使用mysql5.6-5.7),其他就是简单的使用的配置了。