Sonar简介
SonarQube是一个用于代码质量管理的开源平台,用于管理源代码的质量。同时 SonarQube 还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用 SonarQube。此外, SonarQube 的插件还可以对 Java 以外的其他编程语言提供支持,对国际化以及报告文档化也有良好的支持。
通过插件形式,可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy等等二十几种编程语言的代码质量管理与检测,针对不同的编程语言其所提供的分析方式也有所不同: 对于所有支持的编程语言,SonarQube 都提供源了代码的静态分析功能; 对于某些特定的编程语言,SonarQube 提供了对编译后代码的静态分析功能。
通过客户端插件分析源代码,sonar客户端可以采用IDE插件、Sonar-Scanner插件、Ant插件和Maven插件方式,并通过各种不同的分析机制对项目源代码进行分析和扫描,并把分析扫描后的结果上传到sonar的数据库,通过sonar web界面对分析结果进行管理。
检测代码质量的七个维度:
- 复杂度分布(complexity):代码复杂度过高将难以理解
- 重复代码(duplications):程序中包含大量复制、粘贴的代码而导致代码臃肿,sonar可以展示源码中重复严重的地方
- 单元测试统计(unit tests):统计并展示单元测试覆盖率,开发或测试可以清楚测试代码的覆盖情况
- 代码规则检查(coding rules):通过Findbugs,PMD,CheckStyle等检查代码是否符合规范
- 注释率(comments):若代码注释过少,特别是人员变动后,其他人接手比较难接手;若过多,又不利于阅读
- 潜在的Bug(potential bugs):通过Findbugs,PMD,CheckStyle等检测潜在的bug
- 结构与设计(architecture & design):找出循环,展示包与包、类与类之间的依赖、检查程序之间耦合度
准备资料
- sonarqube-8.0(https://www.sonarqube.org/)
- JDK 11.0.5
- postgresql-12.1-1-windows-x64-binaries(https://www.postgresql.org/)
说明:sonarqube-7.9之后就不在支持MySql,而且JDK必须是11+,但笔者尝试使用最新的13.0.1时也不成功,建议使用11版本的进行配置。
安装Sonar
- 解压sonarqube安装包,如解压后:
D:\ProductionEnv\sonarqube-8.0
。 - 在PostgreSQL中建库,如下,数据库名、用户名、密码均为:
sonarqube
,注意PostgreSQL要开启远程访问。create user sonarqube with password 'sonarqube'; create database sonarqube owner sonarqube; grant all on database sonarqube to sonarqube;
- 进入
D:\ProductionEnv\sonarqube-8.0\conf
,编辑配置文件sonar.properties,指定数据库连接信息sonar.jdbc.username=sonarqube sonar.jdbc.password=sonarqube sonar.jdbc.url=jdbc:postgresql://127.0.0.1/sonarqube
- 启动Sonar,直接执行
D:\ProductionEnv\sonarqube-8.0\bin\windows-x86-64\StartSonar.bat
启动服务。 - 访问
http://xxxxxxx:9000
进入Sonar,用户名密码默认为admin/admin
。
创建bat脚本执行启动
set "SONAR_HOME=D:\ProductionEnv\sonarqube-8.0"
rem set "JAVA_HOME=D:\ProductionEnv\Java\jdk-13.0.1"
rem set PATH=%PATH%;%SONAR_HOME%\bin;%JAVA_HOME%\bin
set JAVA_HOME=D:\ProductionEnv\Java\jdk-11.0.5
set PATH=%JAVA_HOME%/bin;%JAVA_HOME%/jre/bin
set CLASSPATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
rem java -version
start %SONAR_HOME%\bin\windows-x86-64\StartSonar.bat
配置LDAP集成
- 收集LDAP产品版本、服务地址、用于绑定的账号、密码等。
- 编辑
sonar.properties
,将如下内容填入(笔者使用的是OpenLdap,不同产品部分值可能不一样)。#admin sonar.security.realm=LDAP ldap.url=ldap://localhost:389 ldap.bindDn=cn=Manager,dc=tansun,dc=com ldap.bindPassword=password #users ldap.user.baseDn=ou=Uniform Reporting Platform,dc=tansun,dc=com ldap.user.request=(&(objectClass=inetOrgPerson)(uid={login})) ldap.user.realNameAttribute=cn ldap.user.emailAttribute=mail
- 重启验证。
数据库连接报错
尝试使用MySQL数据库时,报错如下,这是因为sonarqube-7.9之后就不在支持MySql,笔者使用的是PostgreSQL。
wrapper | --> Wrapper Started as Console
wrapper | Launching a JVM...
jvm 1 | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
jvm 1 | Copyright 1999-2006 Tanuki Software, Inc. All Rights Reserved.
jvm 1 |
jvm 1 |
jvm 1 | WrapperSimpleApp: Encountered an error running main: org.sonar.process.MessageException: Unsupported JDBC driver provider: mysql
jvm 1 | org.sonar.process.MessageException: Unsupported JDBC driver provider: mysql
wrapper | <-- Wrapper Stopped
请按任意键继续. . .