简介

 SonarQube是用于代码质量管理的开源平台,用于管理代码的质量,通过插件的形式,可以支持包括Java、PHP、C#、C、Cobol、PL/SQL、JavaScript、Groovy等等二十几种编程语言的代码质量管理与检测,是代码审查利器,可以帮助我们分析bug,漏洞,异味,代码覆盖率和重复代码的问题。

官网手册: Install the Server | SonarQube Docs

SonarQube安装使用 | 最新快讯_java

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
  • 1.

SonarQube安装使用 | 最新快讯_java_02

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
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

4、初次启动,因为需要初始化数据库等操作,需要等待一会才能访问,此时访问界面为英文界面,如果需要汉化可安装汉化包插件。

插件安装

1、汉化包:

sonarqube自带应用市场可以下载安装,但是由于应用市场提供的插件仅适配最新版sonarqube,我们只能通过手动下载安装汉化包。

下载地址: https://github.com/xuhuisheng/sonar-l10n-zh/releases/download/sonar-l10n-zh-plugin-1.28/sonar-l10n-zh-plugin-1.28.jar

可根据sonarqube版本查找对应的汉化包版本。

下载完成后上传至sonarqube的插件目录即可,由于我们是docker容器安装,所以我们需要先将插件包上传到我们的宿主机,然后通过docker命令复制至插件目录,sonarqube重启即可。

假设插件包宿主机所在位置为/tmp目录,命令如下:

docker cp /tmp/sonar-l10n-zh-plugin-1.28.jar sonarqube:/opt/sonarqube/extensions/plugins/
  • 1.

2、PDF报告导出:

1)项目地址: sonar-pdf-plugin: sonarqube生成pdf报告插件,支持 5.5--7.x

2)clone项目到本地,根据我们sonarqube版本切换到对应的分支:

SonarQube安装使用 | 最新快讯_jar_03

我们安装的sonarqube版本为7.8,切换到项目的3.0.xfor7.0,编译项目:

mvn clean package -Dmaven.test.skip=true -Dlicense.skip=true
  • 1.

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/
  • 1.

4)启动完成后,在sonarqube配置栏会出现PDF Report,我们需要对该插件进行账号密码等配置,否则对该项目进行扫描,会发现PDF插件构建失败。

SonarQube安装使用 | 最新快讯_docker_04

5)项目通过sonar扫描时,需输入该插件用户名及密码,参数如下:

sonar.pdf.username=XXX

sonar.pdf.password=XXX

比如通过maven扫描

mvn sonar:sonar -Dsonar.pdf.username=XXX -Dsonar.pdf.password=XXX
  • 1.

扫描方式(二种)

一、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>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.

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,如下图所示,代表环境变量配置正确

SonarQube安装使用 | 最新快讯_java_05

如果出现:不是内部命令、外部命令的提示,代表环境变量没有配置正确。

4、修改sonar-scanner配置文件:

进入到sonar-scanner的conf目录,找到sonar-scanner.properties文件,配置sonarqube服务器地址,数据库地址,编码格式,如图:

SonarQube安装使用 | 最新快讯_docker_06

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.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

常见问题:

1、安装启动失败,查看日志提示max virtual memory areas vm.max_map_count [xxxx] is too low:

SonarQube安装使用 | 最新快讯_java_07

解决:

编辑sysctl.conf文件

vi /etc/sysctl.conf
  • 1.

末尾添加 vm.max_map_count = 262144

SonarQube安装使用 | 最新快讯_docker_08

重新加载sysctl.conf

sysctl -p
  • 1.

SonarQube安装使用 | 最新快讯_docker_09

重新启动sonarqube即可

如何更改 SonarQube 上项目的显示名称?

如果您的项目有一个文件,则名称是由该文件中的属性sonar-project.properties指定的。sonar.projectName=...

如果您在 Maven 项目中,此值来自根 POM 文件中提供的项目名称。

否则,您可以在运行分析时在命令行上设置名称,通常带有-Dsonar.projectName=...参数。