1. 概述

SonarQube 是一款开源的代码质量管理平台,能够自动进行代码审查并提供详细的报告和建议。它支持多种编程语言,并能与 CI/CD 工具如 Jenkins 无缝集成。本文档将详细指导你如何从零开始部署、配置和使用 SonarQube 9.9.5。

2. 前提条件

• 操作系统: 推荐使用 Linux 发行版(如 Ubuntu、CentOS),也支持 Windows。

• Java 环境: 需要 JDK 11 或以上版本。

• 数据库: 支持 PostgreSQL、MySQL、Oracle 或 MS SQL Server,推荐使用 PostgreSQL。(现在的稳定版本已经不支持MySQL)

• 硬件要求:

• 内存:至少 2GB(建议 4GB 以上,以便处理大型项目)

• CPU:至少 2 

• 硬盘:至少 1GB 可用空间,视项目大小和扫描频率而定。

3. 安装 SonarQube 9.9.5

3.1 下载 SonarQube 9.9.5

首先,前往 SonarQube 官方网站下载适合你操作系统的 SonarQube 9.9.5 版本。

# 下载 SonarQube 9.9.5

wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-9.9.5.zip

# 解压下载的文件

unzip sonarqube-9.9.5.zip -d /opt

解压后,你会在 /opt 目录下看到一个名为 sonarqube-9.9.5 的文件夹,里面包含了 SonarQube 的所有文件。

3.2 安装并配置数据库

以 PostgreSQL 为例,按照以下步骤安装和配置数据库:

# 更新软件包列表并安装 PostgreSQL

sudo apt-get update

sudo apt-get install postgresql postgresql-contrib

安装完成后,切换到 PostgreSQL 用户并创建数据库和用户:

# 切换到 postgres 用户

sudo -i -u postgres

# 进入 PostgreSQL 命令行

psql

# 创建数据库

CREATE DATABASE sonar;

# 创建用户并设置密码

CREATE USER sonar WITH ENCRYPTED PASSWORD 'sonar_password';

# 授权用户对数据库的完全访问权限

GRANT ALL PRIVILEGES ON DATABASE sonar TO sonar;

# 退出 PostgreSQL 命令行

\q

# 退出 postgres 用户

exit

配置完数据库后,记得记录下数据库名称、用户名和密码,以便后续配置 SonarQube。

3.3 安装并配置 SonarQube 9.9.5

编辑 SonarQube 配置文件 sonar.properties,配置数据库连接:

# 打开配置文件进行编辑

vim /opt/sonarqube-9.9.5/conf/sonar.properties

找到并修改以下配置:

# 数据库配置

sonar.jdbc.username=sonar

sonar.jdbc.password=sonar_password

sonar.jdbc.url=jdbc:postgresql://localhost/sonar

# 配置 web 服务器

sonar.web.host=0.0.0.0

sonar.web.port=9000

保存并关闭配置文件。

3.4 启动 SonarQube 9.9.5

创建一个新的系统用户来运行 SonarQube 服务:

# 创建 sonarqube 用户组和用户

sudo adduser --system --no-create-home --group --disabled-login sonarqube

# 修改 SonarQube 目录的权限

sudo chown -R sonarqube:sonarqube /opt/sonarqube-9.9.5

使用新创建的用户启动 SonarQube:

# 切换到 SonarQube 目录

cd /opt/sonarqube-9.9.5/bin/linux-x86-64/

# 启动 SonarQube

sudo -u sonarqube ./sonar.sh start

检查 SonarQube 是否启动成功:

# 查看 SonarQube 日志

sudo tail -f /opt/sonarqube-9.9.5/logs/sonar.log


如果日志中显示 SonarQube is up,说明 SonarQube 已成功启动。

4. 配置 SonarQube

4.1 初始配置

在浏览器中访问 http://your_server_ip:9000,使用默认管理员账户登录:

• 用户名: admin

• 密码: admin

首次登录后,系统会提示你修改默认密码。建议设置一个强密码以确保安全。

4.2 安装插件

根据项目需求,可以在 SonarQube 中安装不同的插件。导航到 “Administration -> Marketplace”,搜索并安装所需插件。例如:

• SonarJava: 用于 Java 项目分析

• SonarPython: 用于 Python 项目分析

• SonarJS: 用于 JavaScript 项目分析

安装完成后,重新启动 SonarQube 以使插件生效:

# 停止 SonarQube

sudo -u sonarqube ./sonar.sh stop

# 干掉所有SonarQube进程

ps aux | grep sonar | awk '{print $2}' | xargs kill -9

# 启动 SonarQube

sudo -u sonarqube ./sonar.sh start

4.3 配置质量阈

质量阈用于定义代码质量的标准,可以根据项目需求进行配置。导航到 “Quality Gates”,点击 “Create” 创建新的质量阈,并添加相应的条件,例如:

• 代码覆盖率: 至少 80%

• 关键问题: 不允许存在

• 阻塞问题: 不允许存在

• 重复代码: 不超过 3%

配置完成后,点击 “Set as Default” 将其设为默认质量阈。

5. 使用 SonarQube

5.1 创建项目

在管理控制台中导航到 “Projects -> Create Project”,输入项目名称和项目密钥。项目密钥是该项目的唯一标识符,用于扫描配置。

5.2 生成项目令牌

在创建项目时,系统会生成一个项目令牌。此令牌用于配置 SonarQube Scanner 以进行项目扫描。务必保存该令牌,以便在配置扫描器时使用。

5.3 配置扫描器

下载并配置 SonarQube Scanner,以便在本地或 CI 服务器上进行代码扫描。

# 下载 SonarQube Scanner

wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.7.0.2747-linux.zip

# 解压文件

unzip sonar-scanner-cli-4.7.0.2747-linux.zip -d /opt

# 配置环境变量

echo 'export PATH=$PATH:/opt/sonar-scanner-4.7.0.2747-linux/bin' >> ~/.bashrc

# 加载环境变量

source ~/.bashrc

5.4 配置 sonar-project.properties

在项目根目录创建 sonar-project.properties 文件,定义扫描配置:

# 项目标识符

sonar.projectKey=my_project_key

# SonarQube 服务器地址

sonar.host.url=http://your_server_ip:9000

# 项目令牌

sonar.login=your_project_token

# 代码目录

sonar.sources=src

# 编译目录(针对 Java 项目)

sonar.java.binaries=target

# 日志级别(可选)

sonar.verbose=true

5.5 运行扫描

在项目根目录执行以下命令以运行SonarQube扫描

sonar-scanner

扫描完成后,可以在 SonarQube 管理控制台查看详细的代码质量报告。

6. 集成 Jenkins

6.1 安装 SonarQube 插件

在 Jenkins 管理控制台中导航到 “Manage Jenkins -> Manage Plugins”,在 “Available” 选项卡中搜索并安装 “SonarQube Scanner” 插件。

6.2 配置 SonarQube

在 Jenkins 系统配置中添加 SonarQube 服务器:

导航到 “Manage Jenkins -> Configure System -> SonarQube servers”,点击 “Add SonarQube”,输入以下信息:

• Name: SonarQube

• Server URL: http://your_server_ip:9000

• Server authentication token: 使用前面生成的项目令牌

配置 SonarQube Scanner:

导航到 “Manage Jenkins -> Global Tool Configuration -> SonarQube Scanner”,点击 “Add SonarQube Scanner”,输入以下信息:

• Name: SonarScanner

• Install automatically: 选择合适的版本或手动配置路径

6.3 配置 Jenkins 任务

在 Jenkins 中创建或配置一个任务,在 “Build” 步骤中添加 “Execute SonarQube Scanner” 步骤,配置相应的扫描参数:

# 配置 SonarQube 服务器和扫描器

SonarQube installation: SonarQube

Scanner installation: SonarScanner

# 项目密钥

sonar.projectKey=my_project_key

# SonarQube 服务器地址

sonar.host.url=http://your_server_ip:9000

# 项目令牌

sonar.login=your_project_token


配置完成后,保存并构建项目。构建完成后,可以在 SonarQube 管理控制台查看详细的代码质量报告。

7. 使用 Maven 构建和分析项目

7.1 配置 Maven

确保已安装 Maven 并正确配置 settings.xml 文件,包含 SonarQube 的相关配置:

<settings>

  <profiles>

    <profile>

      <id>sonar</id>

      <properties>

        <sonar.host.url>http://your_server_ip:9000</sonar.host.url>

        <sonar.login>your_project_token</sonar.login>

      </properties>

    </profile>

  </profiles>

  <activeProfiles>

    <activeProfile>sonar</activeProfile>

  </activeProfiles>

</settings>

7.2 配置 Maven 的 pom.xml 文件

确保项目的 pom.xml 文件中包含基本的构建配置和依赖。

<project xmlns="http://maven.apache.org/POM/4.0.0"

         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>

    <artifactId>my-project</artifactId>

    <version>1.0-SNAPSHOT</version>

     

    <!-- 其他配置和依赖 -->

</project>

7.3 使用 Maven 运行 SonarQube 扫描

在项目根目录执行以下命令以使用 Maven 进行代码扫描:

mvn clean verify sonar:sonar

8. 常见问题与解决方案

8.1 SonarQube 无法启动

• 检查配置文件: 确保 sonar.properties 文件中的数据库配置正确。

• 查看日志: 检查 /opt/sonarqube-9.9.5/logs/sonar.log 日志文件,获取详细错误信息。

• 端口冲突: 确保 SonarQube 使用的端口(默认 9000)没有被其他应用程序占用。

8.2 扫描失败

• 配置错误: 确保 sonar-project.properties 文件中的配置信息正确无误。

• 依赖问题: 确保项目中所有依赖已经解决,编译没有错误。

• 网络问题: 确保可以访问 SonarQube 服务器。

SonarQube官方文档:https://docs.sonarsource.com/sonarqube/9.9/

SonarQube自定义插件文档:sonar-java/README.md at 7.28.0.33738 · SonarSource/sonar-java · GitHub

SonarQube官方论坛:https://community.sonarsource.com

SonarQube官方练习文档:GitHub - SonarSource/sonar-scanning-examples: Shows how to use the Scanners

阿里P3C插件Java11:p3c/README.md at master · alibaba/p3c · GitHub

阿里P3C插件Java17:GitHub - Leibnizhu/sonar-pmd-p3c-jdk17: 新版sonar-pmd + 新版p3c,支持jdk17

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐