安装步骤

安装和配置:

1.官网最新版压缩包:

代码扫描规SQJava 代码规范扫描 sonar_代码扫描规SQJava


解压缩后:

代码扫描规SQJava 代码规范扫描 sonar_mysql_02

2.配置

代码扫描规SQJava 代码规范扫描 sonar_intellij-idea_03

sonar.web.host=0.0.0.0
sonar.web.port=19800

SonarQube可使用内嵌数据库或外部数据库,如果外部数据库需要添加数据源和驱动

sonar.jdbc.username=mysql
sonar.jdbc.password=mysql
sonar.jdbc.url=jdbc:mysql://ip:3306/mysql?useUnicode=true&characterEncoding=utf8&useSSL=false

代码扫描规SQJava 代码规范扫描 sonar_intellij-idea_04


如果使用内置数据库,配置好内置数据库端口即可:

#----- Embedded Database (default)
# H2 embedded database server listening port, defaults to 9092
sonar.embeddedDatabase.port=9092

3.环境配置
最新版本Sonar需要Java11,请提前配置JAVA_HOME

set JAVA_HOME=C:\Program Files\Java\jdk11.0.4
set PATH=%JAVA_HOME%/bin;%PATH%
启动登陆:

1.启动Sonar
sonarqube-7.9.1\bin\windows-x86-64目录下启动StartSonar.bat。
为方便查看日志输出,建议在cmd中启动。
启动后暂时不要关闭,保持运行状态,后续扫描需要连接。
2.登陆
浏览器打开:localhost:19800
初始用户:admin/admin
JavaScript扫描支持
如果需要扫描Javascript文件,需要安装Node.js。

使用方法

SonarQube支持包括上传代码或集成ant、gradle、maven等编译工具等多种方式进行代码扫描。因为我们的项目多数使用Maven管理,这里介绍使用Maven的方式进行代码扫描。

编辑MAVEN配置文件

代码扫描规SQJava 代码规范扫描 sonar_intellij-idea_05


添加如下pluginGroup和Profile(请自行调整顺序位置):

<pluginGroups>
        <pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
</pluginGroups>
<profiles>
    <profile>
            <id>sonar</id>
            <activation>
                <activeByDefault>true</activeByDefault>
</activation>
 		 	<properties>
                <sonar.host.url>
                  http://localhost:19800
                </sonar.host.url>
            </properties>
        </profile>
</profiles>
在工程中执行扫描

工程中执行扫描,只需要Eclipse中新建一个Maven build即可,如下所示:

代码扫描规SQJava 代码规范扫描 sonar_maven_06


org.sonarsource.scanner.maven:sonar-maven-plugin:3.6.1.1688:sonar

扫描结果:

1. 控制台输出

扫描完成后,Maven会打印和其他Maven操作类似的输出,如下所示:

代码扫描规SQJava 代码规范扫描 sonar_代码扫描规SQJava_07


之后可以登陆SonarQube主页(http://localhost:19800)进行查看:

2.查看代码报告

扫描完成后,登陆页面可以看到扫描的结果报告:

代码扫描规SQJava 代码规范扫描 sonar_intellij-idea_08

其他说明

版本管理

在不使用外部SCM工具的情况下,SonarQube依然提供版本管理功能,支持统一版本号多次扫描结果保存和不同版本号的管理,如下图所示:

代码扫描规SQJava 代码规范扫描 sonar_intellij-idea_09

严重性级别解释

根据之前的经验,目前存在些许误报的情况,并且轻微级别的问题大多可以忽视。官网对于级别的定义如下:

代码扫描规SQJava 代码规范扫描 sonar_数据库_10


代码扫描规SQJava 代码规范扫描 sonar_intellij-idea_11


需要注意的是,根据如上说明,Major影响比Critical更大,但是发生概率较低,Critical发生概率大。所以除了Minor其他问题都应该视为必须要修改的问题。

问题处理建议

经过实践,发现现存代码扫描出的问题较多,所以提出以下处理建议:
1.所有类型的Blocker级别都应该优先分析处理;
2.Reliability Bugs和安全性Vulnerability的Critical和Major级别都应该分析处理;
3.所有的Minor级别、可维护性条目以及代码冗余在已上线项目中重暂缓处理,在新项目中尽量减少。