SonarQube是一种自动代码审查工具,用于检测代码中的错误,漏洞和代码异味。它可以与您现有的工作流程集成,以便在项目分支和拉取请求之间进行连续的代码检查。
官方网站:
https://www.sonarqube.org/
运行SonarQube的唯一先决条件是在您的计算机上安装Java(Oracle JRE 8或OpenJDK 8)。
注意: 在Mac OS X上,强烈建议安装Oracle JDK 8而不是相应的Oracle JRE,因为JRE安装未正确完全设置Java环境。
- SonarQube服务器的小型(个人或小团队)实例需要至少2GB的RAM才能有效运行,并且1GB的可用RAM用于操作系统。如果要为大型团队或Enterprise安装实例,请考虑以下其他建议。
- 您需要的磁盘空间量取决于您使用SonarQube分析的代码量。例如,SonarClube的公共实例SonarCloud拥有超过3.5亿行代码,有5年的历史。SonarCloud目前在集群Amazon EC2 m5.large实例上运行,每个节点分配50 Gb的驱动器空间。它处理19,000多个项目,大约有1400万个未解决的问题。SonarCloud在PostgreSQL 9.5上运行,它为数据库使用了大约250Gb的磁盘空间。
- SonarQube必须安装在具有出色读写性能的硬盘上。最重要的是,“data”文件夹包含Elasticsearch索引,当服务器启动并运行时,将在其上完成大量I / O. 因此,良好的读写硬盘性能将对整个SonarQube服务器性能产生很大影响。
对于SonarQube的大型团队或企业级安装,需要额外的硬件。在企业级别,监控SonarQube实例/实例管理/ java-process-memory是必不可少的,并且应该随着实例的增长引导进一步的硬件升级。起始配置应至少包括:
SonarQube Java分析器能够分析任何类型的Java源文件,无论它们遵循的Java版本如何。
但SonarQube分析和SonarQube服务器需要特定版本的JVM。
参考资料:
Prerequisites and overview
版本注意:jdk8支持的sonarqube版本最高是7.8,而从7.9版本开始都是要求jdk11了,下载的话需要注意版本的对应关系,SonarQube 7.6, 对应 JDK8,MySQL 版本>=5.6 && <8.0。sonarqube从7.8起,不再支持mysql。SonarQube 的社区版是免费的,其他版本是收费的!!!
SonarQube官方下载页面Download | SonarQube | Sonar,这里我们下载免费的社区版
SonarQube 7.9开始需要Java 11且不支持mysql了,所以这里我们选择7.0版本进行下载
我们把页面拉到最下面,选择Historical Downloads
我的jdk是1.8,mysql数据库,所以下载的版本是:7.0版本,zip安装包下载地址:
https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.0.zip
由于低版本SonarQube自带的插件商店没有对应的汉化版本,这里我们自己下载汉化插件。
Releases · xuhuisheng/sonar-l10n-zh · GitHub
下载汉化包地址:https://github.com/xuhuisheng/sonar-l10n-zh/releases
下载完成之后,我们将这个jar包放入SonarQube的安装目录下的extensions\plugins文件夹中即可
MySQL :: Download MySQL Community Server (Archived Versions)
root登录数据库,执行以下命令:
创建sonar数据库
创建sonar 用户
给sonar 赋予权限
密码是sonar
刷新权限
CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER 'sonar' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
FLUSH PRIVILEGES;
打开sonar/conf目录下的sonar.properties,加入以下配置项:
#数据库连接url
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
#数据库用户
sonar.jdbc.username=sonar
#数据库密码
sonar.jdbc.password=sonar
sonar.sorceEncoding=UTF-8
sonar.login=admin
sonar.password=admin
url是数据库连接地址,username是数据库用户名,jdbc.password是数据库密码,login是sonarqube的登录名,sonar.password是sonarqube的密码
sonar默认的登陆名和密码都是admin,默认端口是http://localhost:9000/
如果想修改端口:
将下载的汉化jar放到extensions\plugins路径:
我解压缩sonarqube-7.0.zip到这个目录 D:\software\sonarqube-7.0\bin\windows-x86-64
我使用的是windows的64位系统,则打开bin\windows-x86-64\StartSonar.bat,看到如下代表启动成功。
注意:启动sonar服务的同时,也启动了jdk 的Java服务,如果提示如下报错,必须关闭所有的Java服务
(执行StartSonar.bat脚本启动SonarQube后,如果不小心关闭了控制台,其实这个时候SonarQube并没有被关闭,后台还有进程在,所以下次启动时会报错,这个时候就要手动杀掉进程了。)
访问地址:http://localhost:9000/
若启动报错可检查logs文件下的日志,检查顺序:sonar.log -> es.log -> web.log
访问sonar首页,按照提示一步步来即可
设置令牌
这个时候我们要把这个令牌复制下来,因为后面就看不到了!
三种方式来使用SonarQube的代码扫描功能:
① Maven方式执行代码检测
② SonarScanner方式执行代码检测
③ 集成Jenkins执行代码检测
创建完项目后,我们选择maven方式构建,即可看到SonarQube给我们提供的maven扫描命令:
mvn sonar:sonar -Dsonar.projectKey=test -Dsonar.host.url=http://127.0.0.1:9000 -Dsonar.login=生成的令牌
进入到要扫描的代码目录,执行上面的maven命令即可,执行完毕后在SonarQube页面即可看到扫描结果。
注:上面的命令中有些是固定的信息,如果每次执行扫描都需要输入则显的很麻烦,这里我们可以将某些信息配置到maven的setting.xml中:
sonar
true
jdbc:mysql://127.0.0.1:3306/sonar?useUnicode=true&characterEncoding=utf8
sonar
sonar
http://127.0.0.1:9000
admin
admin
或者:
sonar
true
http://127.0.0.1:9000
7a13de184fe9d79c59e24062d0065bd87b7064e9
以后直接执行mvn sonar:sonar -Dsonar.projectKey=test即可。甚至mvn sonar:sonar都可以,SonarQube会自动以maven的坐标为项目key去创建项目。
SonarQube提供了SonarScanner组件来帮助我们执行扫描,首先下载:
https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/
下载之后是个压缩包,解压即可,为了方便使用,我们可以将解压后的目录下的bin目录加入到环境变量中,这样可以直接使用sonar-scanner命令了。
新增变量: SONAR_SCANNER_HOME = D:\software\sonar-scanner-cli-4.1.0.1829-windows
修改Path变量:增添 %SONAR_SCANNER_HOME%\bin\
打开SonarScanner的配置文件conf\sonar-scanner.properties,做如下修改:
进入到待扫描的项目目录下,新建sonar-project.properties文件,内容如下:
sonar.projectKey=test
sonar.projectName=test
#sonar.projectVersion=1.0
#sonar.sources=./src
sonar.sourceEncoding=UTF-8
#sonar.language=java
sonar.java.binaries=.
然后再命令行执行sonar-scanner即可。
Jenkins作为一个开源的、提供友好操作界面的持续集成(CI)工具,广受大家的喜爱,Jenkins提供了SonarQube扫描插件可以方便的让我们直接扫描代码仓库中的代码质量,而前两种方式更偏向于开发人员本地去做,更依赖开发人员的自觉性,而使用Jenkins的方式则更方便对整个团队进行 Code Review,更方便的进行规范管理。
1.下载jenkins (war包或者msi均可)(安装过程省略)
War Jenkins Packages
①.首先需要安装SonarQube Scanner插件,系统管理 > 插件管理,搜索SonarQube Scanner插件并安装;安装后进入到系统管理 > 系统配置 > SonarQube servers,添加SonarQube服务器
安装后进入到系统管理 > 系统配置 > SonarQube servers,添加SonarQube服务器
第一次配置是不能选择Secert Text。可以先保存,之后再过来修改,点击添加按钮添加Jenkins:
将sonarqube生成的token设置到Secret中。类型选择Secert Text。
配置SonarQube Scanner
先配置好JDK
在全局工具管理中配制SonarQube Scanner:
Jenkins在项目中引用sonarqube scanner:
新建一个项目
如果不创建空间的话,等于是没有空间放代码,可以先build一次:
sonarprojectName=SfOB NAME
sonar.projectKey=SJOB_NAME)
sonar.sources=/cvrvideo
sonar;java.binaries=./cvrvideo/target/classes
可以点击链接,然后查看扫描的结果。
配置一下maven
构建项目:
clean
verify
sonar:sonar
-Dsonar.host.url=http://192.168xx.xxx:9000
-Dsonar.login=#填写自行生成的token