代码审查工具SonarQube详解
代码审查工具SonarQube详解

文章目录
- 代码审查工具SonarQube详解
- docker安装启动
- 代码检测方式介绍
- java可以用maven方式
- scanner命令方式
- 插件方式集成Jenkins
SonarQube是一种自动代码审查工具,可以检测出重复代码、代码漏洞、代码规范和安全性漏洞的问题。它可以与您现有的工作流程集成,以实现跨项目分支和提取请求的连续代码检查
Sonar Qube可以与多种软件整合进行代码扫描,比如Maven,Gradle,Git,Jenkins等,并且会将代码检测结果推送回Sonar Qube并且在系统提供的UI界面上显示出来
一个 SonarQube 实例包含三个组件:

- SonarQube 服务器运行以下进程:
- 服务于 SonarQube 用户界面的 Web 服务器。
- 基于 Elasticsearch 的搜索服务器。
- 负责处理代码分析报告并将其保存在 SonarQube 数据库中的计算引擎。
- 数据库存储以下内容:
- 代码扫描期间生成的代码质量和安全性指标和问题。
- SonarQube 实例配置。
- 在您的构建或持续集成服务器上运行的一台或多台扫描仪,用于分析项
为什么选择PostgreSQL不支持mysql?
PostgreSQL 和 MySQL 都是流行的关系型数据库管理系统,它们各自有不同的优势和适用场景:
1. 数据类型和完整性
PostgreSQL 在数据类型和完整性方面比 MySQL 更为严格。如果您需要存储复杂数据类型或需要强制执行数据完整性规则,那么 PostgreSQL 是更好的选择。例如,如果您需要存储 JSON 数据类型或使用外键约束等高级功能,那么 PostgreSQL 是更好的选择。
2. 大型应用和高负载
如果您需要处理大量数据和高并发负载,那么 PostgreSQL 是更好的选择。PostgreSQL 在处理大型数据集和高并发负载方面表现得更好。如果您需要处理非常大的数据集、高并发读写或复杂的查询,那么 PostgreSQL 是更好的选择。
3. 简单的 Web 应用
如果您的应用程序是一个简单的 Web 应用程序,那么 MySQL 可能是更好的选择。MySQL 是一个更轻量级、更易于使用和安装的数据库管理系统。如果您只需要存储少量数据或需要一个小型数据库作为应用程序的后端,那么 MySQL 是更好的选择。
4. 事务处理
如果您需要处理复杂的事务处理,那么 PostgreSQL 是更好的选择。PostgreSQL 支持更高级的事务处理功能,例如 SavePoints(保存点)和 Rollback to SavePoint(回滚到保存点),这些功能可以帮助您更好地管理数据一致性和可靠性。
5. 数据库扩展性
如果您需要一个高度可扩展的数据库管理系统,那么 PostgreSQL 是更好的选择。PostgreSQL 提供了更多的扩展性选项,例如分区表、并行查询和流复制功能,这些功能可以帮助您更好地处理大量的数据和高并发负载。
当考虑 PostgreSQL 和 MySQL 时,以下是一些其他方面的比较:
- 数据库复制和高可用性:PostgreSQL 使用流复制来实现高可用性和数据库复制,而 MySQL 使用复制技术来实现。PostgreSQL 的流复制提供更好的性能和更高的可靠性,但需要更多的配置和管理。MySQL 的复制技术更容易使用和管理,但在大型复制和高可用性方面的性能可能不如 PostgreSQL。
- 全文搜索:PostgreSQL 有一个内置的全文搜索引擎,可以用于搜索文本数据。MySQL 也提供全文搜索功能,但需要使用插件或扩展来实现。
- 性能:在某些方面,例如并发读取和写入性能,PostgreSQL 可能比 MySQL 更快。但在其他方面,例如写入性能,MySQL 可能比 PostgreSQL 更快。这取决于您的应用程序的需求和负载模式。
- 存储引擎:MySQL 支持多个不同的存储引擎,例如 InnoDB、MyISAM 等等。每个存储引擎都有不同的优缺点,可以根据应用程序的需求进行选择。相比之下,PostgreSQL 只使用一种存储引擎,但这意味着它可以提供更一致的性能和可靠性。
docker安装启动
系统安装条件:
如果您在 Linux 上运行,则必须确保:
vm.max_map_count大于或等于 524288fs.file-max大于或等于 131072- 运行 SonarQube 的用户至少可以打开 131072 个文件描述符
- 运行 SonarQube 的用户至少可以开启 8192 个线程
修改/etc/sysctl.conf 添加
vm.max_map_count = 524288
root@train-1:~/sonarqube# sysctl -p
vm.max_map_count = 524288
不修改vm.max_map_count报错提示:

#docker-compose.yamlversion: "3"services:sonarqube:image: sonarqube:communitydepends_on:- dbenvironment:SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonarSONAR_JDBC_USERNAME: sonarSONAR_JDBC_PASSWORD: sonarvolumes:- sonarqube_data:/opt/sonarqube/data- sonarqube_extensions:/opt/sonarqube/extensions- sonarqube_logs:/opt/sonarqube/logsports:- "9000:9000"db:image: postgres:12environment:POSTGRES_USER: sonarPOSTGRES_PASSWORD: sonarports:- "5432:5432"volumes:- postgresql:/var/lib/postgresql- postgresql_data:/var/lib/postgresql/datavolumes:sonarqube_data:sonarqube_extensions:sonarqube_logs:postgresql:postgresql_data:
默认admin密码admin登录

汉化

代码检测方式介绍
java可以用maven方式

然后在终端输入:
mvn sonar:sonar
scanner命令方式
安装scanner命令
下载解压后
配置指定sonar服务端地址

在代码处执行scanner命令检测代码:
/root/sonarqube/sonar-scanner/bin/sonar-scanner \-Dsonar.sources=./ -Dsonar.token=sqp_b5dd9127f2f6b4021f8a7d6551803af8a24d4c6d \-Dsonar.projectKey=test -Dsonar.java.binaries=./target
上述-Dsonar.token生成方式如下:


分析结果:

插件方式集成Jenkins
官网介绍
1.安装插件

2.配置sonarQube服务器连接
3.配置sonarscanner工具路径

4.任务中添加代码检测步骤

参数同命令行使用

sonar.sources=./
sonar.projectKey=%(JOB_NAME)
sonar.java.binaries=./target
参数同命令行使用

sonar.sources=./
sonar.projectKey=%(JOB_NAME)
sonar.java.binaries=./target
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
