SonarQube QuickStart

SonarQube 作为一款开源的代码质量检测工具, 非常适合有代码把控质量的需求的开发人员使用, 此篇文章将介绍如何快速的搭起一个 SonarQube 的运行环境, 以及在实际代码中使用到 SonarQube 提供的分析工具来做代码质量检测

SonarQube 安装

现在安装所有的工具, 我都倾向于使用 Docker 作为第一首选安装途径, 在Github 查看了 SonarQube 的开源项目后, 找到了官方提供的 Dockerfile 项目 docker-sonarqube

Dokcer Hub 上 我们可以看到其官方镜像的最新版本, 笔者现在看到的是7.1版本

查看完 Dockerfile 之后, 我们开始制作 docker-compose.yml 文件

  • 我们的服务器上直接创建一个 sonar 的文件夹, 来放置我们的 docker-compose.yml

    此文件夹位置可随意, 按自己的喜好即可

    1
    mkdir sonar


创建 docker-compose.yml

[sonarWebUIPort] : 对外提供 SonarQube 服务的端口

[jdbc-user] : SonarQube 存放数据, 用于 JDBC 访问的用户名

[jdbc-password] : SonarQube 存放数据, 用于 JDBC 访问的密码

[your-mysqlIP] : SonarQube 存放数据, 用于 JDBC 访问的数据库地址

[your-mysqlPort] : SonarQube 存放数据, 用于 JDBC 访问的数据库端口

1
2
3
4
5
6
7
8
9
10
11
12
13
version: "3"

services:
sonarqube:
image: sonarqube:7.1
container_name: sonar
ports:
- [sonarWebUIPort]:9000
- 29092:9092
environment:
- SONARQUBE_JDBC_USERNAME=[jdbc-user]
- SONARQUBE_JDBC_PASSWORD=[jdbc-password]
- SONARQUBE_JDBC_URL=jdbc:mysql://[your-mysqlIP]:[your-mysqlPort]/sonar?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false

制作好以后, 利用 docker-compose 命令启动容器

建议第一次启动, 不要加参数 -d, 便于查看启动日志

1
docker-compose up

启动完成以后, 我们可以访问 服务器IP:sonarWebUIPort 查看是否启动成功

如需登录, 可使用默认用户名密码 admin/admin

SonarQube 扫描

在安装好了 SonarQube 环境以后, 我们开始对我们的代码进行扫描检测, SonarQube 官方有提供非常详细的例子,
因为我们的项目代码使用 ant 进行构建, 所以这里我们关注 ant-example, 其他的常见的有 maven, gradle, 大家可按照实际情况进行配置

前提条件

使用方法

配置 ant 构建脚本

因为每人的 ant 编译脚本都不太相同, 所以此处只说明一些必要的配置项

  • 请在 project 中加入 xmlns:sonar=”antlib:org.sonar.ant
  • 请配置自己本地的 sonar_ant_scaner_lib
  • 请配置自己项目的 src.dir, build.dir, classes.dir
  • 请配置自己项目的 sonar.host.url
  • 请配置自己项目的 sonar.binaries, sonar.java.binaries
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
27
28
29
30
31
32
33
34
35
<?xml version="1.0" ?> 
<project name="ant example" default="sonar" basedir="." xmlns:sonar="antlib:org.sonar.ant">

<property name="sonar_ant_scaner_lib" value="/Users/sky/zenlayer/sonar_ant_scaner_lib" />

<!-- ========= Define the main properties of this project ========= -->
<property name="src.dir" value="src" />
<property name="build.dir" value="dist" />
<property name="classes.dir" value="${build.dir}/classes" />

<!-- Define the SonarQube global properties (the most usual way is to pass these properties via the command line) -->
<property name="sonar.host.url" value="http://10.1.10.217:29000" />

<!-- Define the Sonar properties -->
<property name="sonar.projectKey" value="org.sonarqube:sonarqube-scanner-ant" />
<property name="sonar.projectName" value="ant example" />
<property name="sonar.projectVersion" value="1.0" />
<property name="sonar.language" value="java" />
<property name="sonar.sources" value="src" />
<property name="sonar.binaries" value="dist" />
<property name="sonar.java.binaries" value="dist" />
<property name="sonar.sourceEncoding" value="UTF-8" />

<!-- ========= Define SonarQube Scanner for Ant Target ========= -->
<target name="sonar" depends="compile">
<taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml">
<!-- Update the following line, or put the "sonar-ant-task-*.jar" file in your "$HOME/.ant/lib" folder -->
<classpath path="${sonar_ant_scaner_lib}/sonarqube-ant-task-2.5.jar" />
</taskdef>

<!-- Execute SonarQube Scanner for Ant Analysis -->
<sonar:sonar />
</target>

</project>

制作好以后, 我们可以启动 sonarQube scanner

1
2
cd your-project-root-floder
ant -f your-ant-filename.xml sonar

常见问题

  • 如果项目中使用 SVN 了, 那么需要配置 SVN 账号