sonarqube是一个代码质量管理工具,同样是开源的,说白了其实它做的事也是“代码静态分析”,和安装在IDE中的findbugs、checkstyle等插件有几分类似。官方称其支持20+种语言,对java的支持更是不在话下。

我也是在实习期间第一次接触到这个工具,公司里将它同jenkins这一持续集成工具整合,从而实现每每向git仓库提交代码就自动触发编码质量检查的目的。检查的结果呢,根据问题的类型和严重性,在其web界面上一目了然,老大快瞅瞅哪个程序猿儿欠下了哪些技术债[坏笑]。如果进一步和CI整合,还可以限制诸如代码质量达不到某个级别就不允许进一步操作等,从而确实提高编码质量。

现在我也在自己的云主机上搭建一套sonarqube环境。首先要明确一点,sonarqube从整体上看分成两部分,server和scanner。其中在服务器上安装的为server部分,且server需要连接数据库来存储自身的配置和检查结果等、需要安装插件来实现对不同语言、不同VCS的支持等。至于scanner,那是运行在CI、IDE或者maven等项目管理工具上的,作用就是分析项目。

下载

sonarqube在其官方网站上就可以完整下载到,体积看上去不小,再看看最低硬件要求,实话说也蛮高的,我猜测可能和它包含了web服务、cs计算引擎、es全文索引三大件有关吧,下载完毕后解压到/opt目录即可。

配置

sonarqube的配置文件位于./conf目录下,包括sonar.properties
和wrapper.conf两个,依次打开看看。

sonar.properties

这个文件是sonarqube的核心配置文件了,可以/需要配置的东西还是不少的。粗略浏览一下,包括这么几个部分

  • 数据库
  • Web服务器
  • SSO鉴权
  • 计算引擎
  • 全文搜索引擎
  • 代理服务器
  • 日志
  • 其他杂项 & 开发者选项

受限于篇幅,本文参考官方教程,简单阐述一些必须的配置。首先自然是数据库老三样——URL、用户名和密码

1
2
3
sonar.jdbc.username=sonarqube
sonar.jdbc.password=password
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonarqube

其次是HTTP服务绑定的网卡和端口

1
2
sonar.web.host=0.0.0.0
sonar.web.port=9000

最后是官方建议的,对Web服务所在的jvm启用-server参数,据说可以提高性能

1
sonar.web.javaOpts=-server

哦对了,数据目录和日志目录不必多说,看过我前面几篇博客都应该发现我将所有与业务的这两个目录统一放在/data下了。

至于其他的配置项,由于配置文件里的说明十分详细,有需要的同学可以按着说明调整相关的配置。

wrapper.conf

这个文件配置的是Java Service Wrapper,它是啥大伙自行谷歌去。

虽然这个文件标明了,除了JVM路径以外的内容不要修改,但毕竟其中包含了wrapper的日志目录,而且默认的配置是大小不限制、文件数不限制,如果访问量大的话,不可避免地会在程序目录下打出太多的日志,所以还是把这个改一下吧。

1
2
3
4
5
wrapper.logfile=/data/logs/sonarqube/sonar.log
# 下面2行默认是注释掉的,相应的特性也被禁用了,根据需要修改
wrapper.logfile.maxsize=0
wrapper.logfile.maxfiles=0

启动

进入./bin目录,可以看到sonarqube支持的各种操作系统中所对应的不同启动程序,以我们的linux-x86_64为例,运行

1
./sonar.sh start

即可启动sonarqube。通过浏览器访问server的url就可以看到sonarqube的主界面了(当然第一次访问还需要进行一些初始化工作)。

官方的教程中还提到了如何将sonarqube配置成系统服务

测试

注意了,刚才安装和启动的那只是server部分,前面说过,server一般用来查看分析的结果并做相应的处理,我们还需要scanner来进行代码的分析。官方教程中明确了scanner的6种使用方式。因为我们项目是用maven管理的,又暂时没有接入jenkins,所以这里我们直接通过sonarqube的maven插件进行编码质量检查,顺便做个示范。

首先要在项目的pom文件中加上sonarqube的maven插件

1
2
3
4
5
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.2</version>
</plugin>

这个插件只需要配置一个属性,那就是我们前边部署的server的url

1
2
3
4
5
<properties>
<sonar.host.url>
http://host:port
</sonar.host.url>
</properties>

然后就可以进行编码质量检查了

1
mvn clean verify sonar:sonar

用不了多长时间结果就会被上传,此时用浏览器打开sonarqube的server端,就可以看到代码分析的结果了,各种不规范、坏味道一目了然。