近来一段时间,我们团队在生产环境出现了几次线上问题,有部份比较严重,直接影响用户功能的使用,惹得领导不高兴了,让我想办法提高代码质量,这时侯项目工程代码质量监测利器——SonarQube,出现在我们的视线当中。
一sonarqube是做哪些的
SonarQube®是一种手动代码审查工具,用于检查代码中的错误,漏洞和代码气味。它可以与您现有的工作流程集成,以实现跨项目分支和提取恳求的连续代码检测。通过插件方式,可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy等二十几种编程语言的代码质量管理与测量。sonarqube可以从以下7个维度检查代码质量,而作为开发人员起码须要处理前5种代码质量问题。
1.1不遵守代码标准
sonarqube可以通过CheckStyle等代码规则检查工具规范代码编撰。
1.2存在的缺陷漏洞
sonarqube可以通过Findbugs等等代码规则检查工具测量出潜在的缺陷。
1.3糟糕的复杂度分布
文件、类、方法等,假如复杂渡过高将无法改变,这会促使开发人员无法理解它们,且假如没有手动化的单元测试,对于程序中的任何组件的改变都将可能造成须要全面的回归测试。
1.4重复
其实程序中包含大量复制粘贴的代码是质量低下的,sonarqube可以展示源码中重复严重的地方。
1.5注释不足或则过多
没有注释将使代码可读性变差,非常是当不可防止地出现人员变动时,程序的可读性将急剧增长而过多的注释又会促使开发人员将精力过多地耗费在阅读注释上,亦违反本意。
1.6缺少单元测试
sonarqube可以很便捷地统计并展示单元测试覆盖率。
1.7糟糕的设计
通过sonarqube可以找出循环,展示包与包、类与类之间的互相依赖关系,可以测量自定义的构架规则通过sonarqube可以管理第三方的jar包,可以借助LCOM4检查单个任务规则的应用情况,检查耦合。sonarqube可以很便捷地统计并展示单元测试覆盖率。
总览:
在典型的开发过程中:
开发人员在IDE中开发和合并代码(最好使用SonarLint在编辑器中接收即时反馈),之后将其代码签入ALM。
组织的持续集成(CI)工具可以检出,建立和运行单元测试,而集成的SonarQube扫描仪可以剖析结果。
扫描程序将结果发布到SonarQube服务器,该服务器通过SonarQube界面,电子电邮,IDE内通知(通过SonarLint)以及对拉取或合并恳求的修饰(使用DeveloperEdition及更高版本时)向开发人员提供反馈。
SonarQube实例包含三个组件:
SonarQube服务器运行以下过程:
该数据库储存以下内容:
在建立或连续集成服务器上运行的一台或多台扫描仪可以剖析项目。
二sonarqube怎么搭建
官网地址:,选择“文档”菜单
在出现的文档页面中可以选择版本,目前最新的版本是8.5。笔者尝试过三个版本:
8.5:它是目前最新的版本,须要安装JDK11,而且只支持oracle、sqlserver和PostgreSQL数据库
7.9:它是一个常年支持的版本,特别文档,也须要安装JDK11,而且只支持oracle、sqlserver和PostgreSQL数据库。
7.6:它是一个老版本,只需安装JDK8,支持oracle、sqlserver和PostgreSQL数据库,以及mysql数据库。
刚开始我们为了省事,安装了7.6的版本,由于mysql数据库我们早已在用了,无需额外安装其他数据库,但是JDK8也在使用,安装成本最小。并且后来发觉,假如须要安装汉化版插件,或则mybatis插件,这种插件要求的SonarQube版本必须在7.9以上,而且须要运行在JDK11以上。经过权衡过后,我们决定安装最新版的。
2.1安装JDK11和postgreSQL
JDK下载地址:
JDK的安装比较简单,我在这儿就不过多介绍了,网上有好多教程。
PostgreSQL它自己堪称自己是世界上最先进的开源数据库,具有许多功能,借以帮助开发人员建立应用程序,管理员来保护数据完整性和建立容错环境,并帮助您管理数据,无论数据集的大小。不仅免费和开源之外,PostgreSQL也是高度可扩充的。诸如,您可以定义自己的数据类型,建立自定义函数,甚至可以使用不同的编程语言编撰代码,而无需重新编译数据库。
PostgreSQL的安装与使用可以参数:
2.3从zip文件安装sonarqube
SonarQube未能在root基于Unix的系统上运行,因而,如有必要,请为SonarQube创建专用的用户账户。
$SONARQUBE-HOME(下边)指的是SonarQube发行版已解压缩的目录的路径。
设置对数据库的访问
编辑$SONARQUBE-HOME/conf/sonar.properties以配置数据库设置。模板可用于每位受支持的数据库。只需取消注释并配置所需的模板sql停留在安装程序文件,之后注释掉专用于H2的行:
Example for PostgreSQL
sonar.jdbc.username=sonarqube
sonar.jdbc.password=mypassword
sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube
配置Elasticsearch储存路径
默认情况下,Elasticsearch数据储存在$SONARQUBE-HOME/data中,但不建议将其用于生产实例。相反,您应当将此数据储存在其他位置,最好是在具有快速I/O的专用卷中。不仅保持可接受的性能外,这样做还可以简化SonarQube的升级。
编辑$SONARQUBE-HOME/conf/sonar.properties以配置以下设置:
sonar.path.data=/var/sonarqube/data
sonar.path.temp=/var/sonarqube/temp
用于启动SonarQube的用户必须具有对这种目录的读写权限。
启动Web服务器
默认端口为“9000”,上下文路径为“/”。这种值可以在$SONARQUBE-HOME/conf/sonar.properties中进行修改:
sonar.web.host=192.0.0.1
sonar.web.port=80
sonar.web.context=/sonarqube
执行以下脚本来启动服务器:
调整Java安装
假如服务器上安装了多个Java版本,则可能须要明晰定义使用那个Java版本。
要修改SonarQube使用的JavaJVM,请编辑$SONARQUBE-HOME/conf/wrapper.conf并更新以下行:
wrapper.java.command=/path/to/my/jdk/bin/java
您如今可以在http://localhost:9000上浏览SonarQube(默认的系统管理员凭据为admin/admin)。第一次访问这个地址比较会逗留在这个页面一段时间,由于SonarQube会做一些初始化工作,包含往空数据库中建表
初始化成功后运行的页面:
同时会生成20多张表:
2.3安装插件
依据个人须要,可以安装汉化插件,sonarqube默认是英语界面。
github地址:
将项目下载编译打包后,将jar放在$SONARQUBE-HOMEextensionsplugins
目录下即可,之后执行:./sonar.shrestart命令重启sonarqube服务。
据悉,还有mybatis插件
gitee地址:
我个人用过,感觉作用不大,不过可以基于这个代码扩充自己须要的功能。
三sonarqube怎样使用3.1在maven项目中集成sonarqube先在maven的settings.xml文件中降低如下配置:
<pluginGroups>
<pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
</pluginGroups>
<profiles>
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<sonar.host.url>
http://localhost:9000
</sonar.host.url>
</properties>
</profile>
</profiles>
之后在pom.xml文件中降低配置:
org.sonarsource.scanner.maven
sonar-maven-plugin
3.3.0.603
在项目目录下运行代码检查命令:mvncleancomplie-U-Dmaven.test.skip=truesonar:sonar
见到这几句话,就表示检查成功了
之后在sonar后台查看检查报告
报告上面包含:bug、漏洞、异味、安全热点、覆盖、重复率等,对有问题的代码才能快速定位。
点击某个bug可以查看具体有问题代码:
没有关掉输入流问题:
空表针问题:
错误的用法:
SimpleDateFormat不应当被定义成static的。
检查出的代码问题类型太多,这儿就不一一列出了。其实,记住一句话:sonar很牛逼。它不光可以测量出代码问题,还对一些不好的代码写法和用法有更好的建议。
彩蛋
sonarqube十分强悍,里面只介绍了它的基本用法。通常情况下,我们可以使用jenkins配置须要代码检查的项目,从gitlab上下载代码,执行maven编译打包代码测试命令,可直接生成报告。jenkins触发执行代码检查的时机是:1.有代码递交,或则指定例如test分支有代码递交,项目数目少可以这样做。2.定时执行,我们公司就是配置在晚上定时执行sql停留在安装程序文件,由于jenkins布署的项目太多了,为了不影响正常的项目布署。
据悉,我们可以自定义代码检查的执行规则,按照实际的项目需求自己开发插件,例如:我们自己开发了mybatis插件,扫描mapper和xml文件名称不一致的情况。
其实,sonar的功能十分强悍,强烈建议你们在项目中使用,真的可以降低好多隐藏的bug,增强代码质量,假若你用过都会发觉它的用处。假如想了解更多sonar的用法,可以在公众号中回复:sonar,可以获取更详尽的用法。
特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴,可以长按关注一下:
长按订阅更多精彩▼
如有收获,点个在看,诚挚感谢
暂无评论内容