代码审查工具SonarQube详解

代码审查工具SonarQube详解

代码审查工具SonarQube详解_第1张图片

文章目录

  • 代码审查工具SonarQube详解
    • docker安装启动
    • 代码检测方式介绍
      • java可以用maven方式
      • scanner命令方式
      • 插件方式集成Jenkins

SonarQube是一种自动代码审查工具,可以检测出重复代码、代码漏洞、代码规范和安全性漏洞的问题。它可以与您现有的工作流程集成,以实现跨项目分支和提取请求的连续代码检查

Sonar Qube可以与多种软件整合进行代码扫描,比如Maven,Gradle,Git,Jenkins等,并且会将代码检测结果推送回Sonar Qube并且在系统提供的UI界面上显示出来

一个 SonarQube 实例包含三个组件:

代码审查工具SonarQube详解_第2张图片

  1. SonarQube 服务器运行以下进程:
    • 服务于 SonarQube 用户界面的 Web 服务器。
    • 基于 Elasticsearch 的搜索服务器。
    • 负责处理代码分析报告并将其保存在 SonarQube 数据库中的计算引擎。
  2. 数据库存储以下内容:
    • 代码扫描期间生成的代码质量和安全性指标和问题。
    • SonarQube 实例配置。
  3. 在您的构建或持续集成服务器上运行的一台或多台扫描仪,用于分析项

为什么选择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 大于或等于 524288
  • fs.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报错提示:

代码审查工具SonarQube详解_第3张图片

#docker-compose.yaml

version: "3"

services:
  sonarqube:
    image: sonarqube:community
    depends_on:
      - db
    environment:
      SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
      SONAR_JDBC_USERNAME: sonar
      SONAR_JDBC_PASSWORD: sonar
    volumes:
      - sonarqube_data:/opt/sonarqube/data
      - sonarqube_extensions:/opt/sonarqube/extensions
      - sonarqube_logs:/opt/sonarqube/logs
    ports:
      - "9000:9000"
  db:
    image: postgres:12
    environment:
      POSTGRES_USER: sonar
      POSTGRES_PASSWORD: sonar
    ports:
      - "5432:5432"
    volumes:
      - postgresql:/var/lib/postgresql
      - postgresql_data:/var/lib/postgresql/data

volumes:
  sonarqube_data:
  sonarqube_extensions:
  sonarqube_logs:
  postgresql:
  postgresql_data:

默认admin密码admin登录

代码审查工具SonarQube详解_第4张图片

汉化

代码审查工具SonarQube详解_第5张图片

代码检测方式介绍

java可以用maven方式

代码审查工具SonarQube详解_第6张图片

然后在终端输入:

mvn sonar:sonar

scanner命令方式

安装scanner命令

下载解压后

配置指定sonar服务端地址

代码审查工具SonarQube详解_第7张图片

在代码处执行scanner命令检测代码:

/root/sonarqube/sonar-scanner/bin/sonar-scanner \
  -Dsonar.sources=./   -Dsonar.token=sqp_b5dd9127f2f6b4021f8a7d6551803af8a24d4c6d \
  -Dsonar.projectKey=test -Dsonar.java.binaries=./target

上述-Dsonar.token生成方式如下:

代码审查工具SonarQube详解_第8张图片

代码审查工具SonarQube详解_第9张图片

分析结果:

插件方式集成Jenkins

官网介绍

1.安装插件

代码审查工具SonarQube详解_第10张图片

2.配置sonarQube服务器连接

3.配置sonarscanner工具路径

代码审查工具SonarQube详解_第11张图片

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

代码审查工具SonarQube详解_第12张图片

参数同命令行使用

代码审查工具SonarQube详解_第13张图片

sonar.sources=./   
sonar.projectKey=%(JOB_NAME)
sonar.java.binaries=./target

参数同命令行使用

代码审查工具SonarQube详解_第14张图片

sonar.sources=./   
sonar.projectKey=%(JOB_NAME)
sonar.java.binaries=./target

你可能感兴趣的:(devops,devops,代码复审)