为什么今天要推荐SonarQube呢?这话题要从一次客户的项目交付说起。当时服务要部署入驻到客户方的机房,按要求向信息中心提交申请后,却被告知需提供《服务器安全漏洞扫描报告》和《代码安全审计报告》。按照惯例,这些报告一般由第三方做网络安全的公司提供,但谁知客户不想花钱找第三方公司,最后商量要我方用开源工具扫描,并修复完向他们提供报告。这如何是好,做与不做? 似乎没有选择,必须做。
开始找开源的质量管理工具。找了好多款开源质量管理工具(如:Cobra,CodeClimate等),安装部署、扫描及界面不友好、难使用等各种问题。由于本人以前在外企的工作经验,那时同事提供过来的代码检查报告,文档及内容展示等比较友好,能快速定位问题,由处理意见等,我似乎进入寻找曾经的那个“样子”,最终,SonarQube满足了需求。
SonarQube,一款用于代码质量管理的开源工具,是静态代码检查工具。可以很多开发语言,如:php,java, C#, go,C/C++, Cobol, JavaScrip, Groovy 等。
Sonar代码扫描,到底能检测什么?
检测项 |
描述 |
---|---|
代码规范 | 通过Findbugs,PMD,CheckStyle等检查代码是否符合规范。 |
潜在的缺陷 |
可通过Findbugs,PMD,CheckStyle等代码规则检测潜在的缺陷 |
复杂度分布 | 检测文件、类、方法的复杂度分布,过高或过低的复杂度都会影响代码的可维护性。 |
重复编码 |
程序中包含大量复制粘贴的代码是质量低下的,sonar可以展示 源码中重复严重的地方。 |
代码注释问题 | 若代码注释过少,特别是人员变动后,其他人接手比较难接手;若过多,又不利于阅读。 |
测试覆盖率 |
Sonar可以很方便地统计并展示单元测试覆盖率。 |
糟糕的设计 | 通过检测循环、类之间的相互依赖关系等,帮助发现设计上的问题。 |
SonarQube中的重要组件:
组件 |
说明 |
---|---|
SonarScanner |
扫描器,负责将源文件进行代码分析,并将分析后的报告发送给SonarQube服务器 |
SonarQube Server |
SonarQube服务器,负责处理分析报告,后台管理等 |
Database server |
数据库服务器,负责存储数据 |
SonarQube环境搭建
这里我以我搭建的SonarQube 7.6为例,介绍安装使用的过程。
1,Java环境
SonarQube 是一个基于 Java 的应用程序,因此首先需要确保你的服务器系统上安装了 Java环境。
命令:
java -verson
这里建议使用Java11,我们的开发的Java版本,用的就是OpenJDK 11。
2,安装数据库
SonarQube 服务器支持数据库支持PostgreSQL, MySQL, Oracle等,这里我使用的是Mysql。由于SonarQube 7.6支持的MySql版本,需大于等于5.6,小于8.0。导致测试服务器上的Mysql8不能直接使用,只能新安装了一个Mysql5.7,供Sonar服务使用。
关于Mysql的安装过程,这里不做描述。
3,SonarQube服务配置
本次主要是在Windows系统下的操作。
1),下载SonarQube
首先,下载并解压SonarQube后,即可进入bin目录启动,Sonar兼容Mac、Linux、Windows系统,不同系统进入对应的目录启动即可。
2),sonar.properties配置
打开SonarqQube安装目录,修改\conf\sonar.properties文件,指定连接的数据库、用户名、密码,不同的数据库修改对应的jdbc连接、用户名密码等。
配置信息:
sonar.jdbc.username=sonar
sonar.jdbc.password=Mysql@sonardb!
sonar.jdbc.url=jdbc:postgresql://localhost:3306/sonar?.........
3),启动SonarqQube服务
在 SonarQube 的根目录下,找到启动服务脚本,执行启动。Windows系统,进入...\sonarqube-7.6\bin\windows-x86-64目录,双击StartSonar.bat即可启动。
4),访问 SonarQube Web 界面
服务启动成功后,在浏览器http://localhost:9000,默认用户名密码:admin/admin。
到这里,你就可以准备配置Sonar代码扫描啦。
4,SonarScanner 配置
下载安装Sonar-scanner-3.3.0,然后进入安装目录....\sonar-scanner-3.3.0.1492-windows\conf\,配置 sonar-scanner.properties,添加几行配置。
配置信息
sonar.host.url=http://127.0.0.1:9000
sonar.login=admin
sonar.password=admin
配置环境变量:
1),建SONAR_SCANNER_HOME,值:...\Sonar-Scanner\sonar-scanner-3.3.0.1492-windows
2),PATH后加%SONAR_SCANNER_HOME%\bin;
5,SonarQube 创建项目
访问http://localhost:9000,登录SonarQube 服务,创建要分析的软件项目。
6,执行Sonar分析
配置sonar-scanner.properties 全局参数设置。
sonar.projectKey=test
sonar.projectName=test
sonar.projectVersion=1.0
sonar.sources=src/main/java
sonar.java.binaries=target/classes
sonar.login=6c8148e18e76fbc96e73354
打开cmd,进入你要扫描的项目所放磁盘的根目录,执行Sonar-Scanner。
如果命令行显示以上输出,则扫描成功。
7,在SonarQube中查看结果
打开SonarQube,进入前面创建的项目,查看检查结果。
8,生成pdf报告
下载插件地址:https://gitee.com/zzulj/sonar-pdf-plugin/releases,从3.0.xfor7.0 的分支获取,将下载好的jar包放在D:\....\sonarqube-7.6\extensions\plugins,目录下:
放好后,重启startsonar.bat,重新扫描刚才的代码,进入主页,就会出现more的标签。
Sonar PDF报告样例:
关于SonarQube的代码检测分析,今天就写到这里。当然在SonarQube服务实际搭建的过程中,还会有很多的问题需要处理,这里不做一一的赘述,如果你关系或想了解更多的相关内容,可关注此公众号,在我的获取本人联系方式,进行一对一交流讨论,欢迎骚扰!!!