部门需要对代码质量和风格进行统一,提高开发效率和质量。本篇主要对搭建sonar服务过程中碰到的问题做一个简单的复习记录。
SonarQube介绍
SonarQube是基于docker搭建的一个代码检测工具,内置了包括js,xml,java,c#等主流编程语言的代码检测规则。我们也可以通过sonarqube去添加自定义的检测规则。给予阿里巴巴开发手册尝试添加一个自定义的规则。
搭建本地SonarQube服务
可以通过sonarqube官网下载一个sonarqube。我本地安装的版本是6.7.1。下载之后直接解压就行,我们可以将这个理解为tomcat类似的服务器。下面会分析这个项目的结构。
sonarqube目录结构
我们进入到目录下,可以通过extensions目录增加自定义规则,后续会介绍,我们可以将自定义的代码规则打包这个目录下。
bin目录可以启动sonarqube服务,找到对应macos的版本我们可以尝试启动,注意这边启动的时候有个很诡异的地方,我们输入./sonar.sh status
可能会弹出提示,sonarqube is running,但是可能实际上服务可能是stopped未启动的状态,我们可以进入到日志文件tail -f logs/sonar.log查看具体的服务器启动状态。
conf目录下sonar.properties记录sonarqube的配置。我们可以配置访问端口以及本地数据库配置,sonarqube默认会链接到一个临时数据库,数据库主要记录扫描检测代码的结果。
配置本地数据库
sonarqube可以配置本地连接mysql数据库,我们先创建本地mysql数据库账号,注意开启mysql本地服务。
maven配置打包自定义规则代码
sonarqube可以将自定义规则打包到extensions文件夹下,首先我们需要将自己写的自定义规则打包成jar包。
1 | <pluginGroups> |
那么我们通过mvn sonar:sonar可以打包成功,然后在target目录下获取到打包好的jar包。
sonarqube设置使用规则
我们登录到sonarqube创建一个自定义规则组。
我们可以启用规则。
Idea拉取代码分析结果sonarlink
我们可以在idea中下载插件,sonarlink配置到我们的sonarqube代码检测平台,将对应的代码检测结果下载到本地代码中注释。本地代码会在对应行的位置报错,不同的代码规则会给到不同的提示。这里需要保证本地代码的版本和远程分析代码的版本一致,不然可能部分的报错没办法正常显示在正确的位置。
如何添加自定义代码规则
大家可以移步到我的github,根据readme.md中的demo进行开发自定义规则。这里记录下自己开发过程中碰到的部分问题:
1.context.reportissue()调用过程需要指定对应的tree
1 | @Rule( |
执行测试用例之后报错:
因为错将tree打出,所以在报错的时候找错了行。抛出了异常。
碰到的问题
1.从本地访问localhost:9000会访问到空白页,一直没办法定位,一开始以为是数据库配置的问题,后面删除了本地数据库所有的表,sonarqube重启之后正常。
2.从本地访问localhost:9000空白页,上面提到过通过./sonar.sh status访问到的状态是sonarqube is running但是实际上sonarqube并没有启动成功。
3.从本地访问localhost:9000空白页,可能是本地数据库服务没打开,我们cd到mysql的目录下启动服务。