简介
SonarQube是用于代码质量管理的开源平台,用于管理代码的质量,通过插件的形式,可以支持包括Java、PHP、C#、C、Cobol、PL/SQL、JavaScript、Groovy等等二十几种编程语言的代码质量管理与检测,是代码审查利器,可以帮助我们分析bug,漏洞,异味,代码覆盖率和重复代码的问题。
官网手册:Install the Server | SonarQube Docs
SonarQube由服务器、数据库、扫描仪和插件4部分组成。
环境搭建
本文档教程基于Docker容器搭建SonarQube平台,数据库使用Mysql。
由于不同SonarQube版本对jdk版本要求不一致,我们目前开发环境及生产环境实际使用均为jdk1.8,所以本次安装教程使用的是SonarQube7.8版本,7.8版本以上不支持jdk1.8及mysql数据库。
安装步骤:
1、安装mysql数据库,如已有数据库,则可直接使用,mysql安装步骤自行百度,此处不做介绍。
2、docker拉取SonarQube镜像。
docker pull sonarqube:7.8-community
3、启动SonarQube
docker run -d \
--name sonarqube \
-e SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true \
-e SONARQUBE_JDBC_USERNAME=root \
-e SONARQUBE_JDBC_PASSWORD=root \
-e SONARQUBE_JDBC_URL=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&serverTimezone=Asia/Shanghai \
-p 9092:9000 sonarqube:7.8-community
4、初次启动,因为需要初始化数据库等操作,需要等待一会才能访问,此时访问界面为英文界面,如果需要汉化可安装汉化包插件。
插件安装
1、汉化包:
sonarqube自带应用市场可以下载安装,但是由于应用市场提供的插件仅适配最新版sonarqube,我们只能通过手动下载安装汉化包。
可根据sonarqube版本查找对应的汉化包版本。
下载完成后上传至sonarqube的插件目录即可,由于我们是docker容器安装,所以我们需要先将插件包上传到我们的宿主机,然后通过docker命令复制至插件目录,sonarqube重启即可。
假设插件包宿主机所在位置为/tmp目录,命令如下:
docker cp /tmp/sonar-l10n-zh-plugin-1.28.jar sonarqube:/opt/sonarqube/extensions/plugins/
2、PDF报告导出:
1)项目地址:sonar-pdf-plugin: sonarqube生成pdf报告插件,支持 5.5--7.x
2)clone项目到本地,根据我们sonarqube版本切换到对应的分支:
我们安装的sonarqube版本为7.8,切换到项目的3.0.xfor7.0,编译项目:
mvn clean package -Dmaven.test.skip=true -Dlicense.skip=true
3)编译完成后,出现两个jar包,一个叫original-sonar-pdfreport-plugin-3.0.3.jar,一个叫sonar-pdfreport-plugin-3.0.3.jar。将sonar-pdfreport-plugin-3.0.3.jar通过docker命令上传至sonarqube插件目录,然后重启sonarqube。
docker cp /tmp/sonar-pdfreport-plugin-3.0.3.jar sonarqube:/opt/sonarqube/extensions/plugins/
4)启动完成后,在sonarqube配置栏会出现PDF Report,我们需要对该插件进行账号密码等配置,否则对该项目进行扫描,会发现PDF插件构建失败。
5)项目通过sonar扫描时,需输入该插件用户名及密码,参数如下:
sonar.pdf.username=XXX
sonar.pdf.password=XXX
比如通过maven扫描
mvn sonar:sonar -Dsonar.pdf.username=XXX -Dsonar.pdf.password=XXX
扫描方式(二种)
一、maven方式
1、修改maven的settings.xml文件,在profiles节点添加pofile节点及activeProfiles节点添加activeProfile节点
<profiles>
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<!-- 平台登录的账号的用户名 -->
<sonar.login>admin</sonar.login>
<!-- SonarQube平台登录的账号的密码-->
<sonar.password>admin</sonar.password>
<!-- Sonar生成PDF插件用户名 -->
<sonar.pdf.username>admin</sonar.pdf.username>
<!-- Sonar生成PDF插件密码 -->
<sonar.pdf.password>admin</sonar.pdf.password>
<!-- Optional URL to server. Default value is http://localhost:9000 -->
<sonar.host.url>
http://192.168.1.141:9000
</sonar.host.url>
</properties>
</profile>
</profiles>
<activeProfiles>
<activeProfile>sonar</activeProfile>
</activeProfiles>
2、通过maven编译项目时执行maven clean sonar:sonar即可
例如:maven clean package sonar:sonar -Dsonar.pdf.username=admin -Dsonar.pdf.password=admin -Dsonar.projectName=某某系统
二、sonar-scanner
1、下载地址:SonarScanner CLI
2、设置环境变量:直接将bin目录添加到path环境变量中
3、查看安装是否生效:打开cmd,输入:sonar-scanner -version,如下图所示,代表环境变量配置正确
如果出现:不是内部命令、外部命令的提示,代表环境变量没有配置正确。
4、修改sonar-scanner配置文件:
进入到sonar-scanner的conf目录,找到sonar-scanner.properties文件,配置sonarqube服务器地址,数据库地址,编码格式,如图:
5、进入项目中,通过cmd,执行如下命令即可
sonar-scanner.bat \
-D"sonar.projectKey=XXX" \
-D"sonar.host.url=http://192.168.2.122:9000/code_scan" \
-D"sonar.login=XXX" \
-D"sonar.password=XXX" \
-D"sonar.pdf.username=XXX" \
-D"sonar.pdf.password=XXX"
常见问题:
1、安装启动失败,查看日志提示max virtual memory areas vm.max_map_count [xxxx] is too low:
解决:
编辑sysctl.conf文件
vi /etc/sysctl.conf
末尾添加 vm.max_map_count = 262144
重新加载sysctl.conf
sysctl -p
重新启动sonarqube即可
如何更改 SonarQube 上项目的显示名称?
如果您的项目有一个文件,则名称是由该文件中的属性sonar-project.properties指定的。sonar.projectName=...
如果您在 Maven 项目中,此值来自根 POM 文件中提供的项目名称。
否则,您可以在运行分析时在命令行上设置名称,通常带有-Dsonar.projectName=...参数。