SonarQube快速实践
SonarQube快速实践
1. 简介
SonarQube 是一个本地部署的代码分析工具,旨在检测30多种编程语言、框架和基础设施即代码(IaC)平台中的代码问题。通过直接集成到您的持续集成(CI)流水线中或在我们支持的DevOps平台之一上,您的代码将在每次合并或拉取请求时根据广泛的规则集进行检查,涵盖代码的多个属性,如可维护性、可靠性和安全性问题。
作为Sonar解决方案的核心元素,SonarQube 完成了分析闭环,帮助您交付符合高质量标准的清洁代码。
2. 安装SonarQube
SonarQube 主要提供四个版本:社区版 (Community Edition)、开发者版 (Developer Edition)、企业版 (Enterprise Edition) 和数据中心版 (Data Center Edition)。
2.1 安装要求
硬件要求
CategoryRequirement内存对于小规模安装:4GB 的 RAM 对于大规模安装:16GB 的 RAMCPU64 位系统。 对于小规模安装:2 个核心 对于大规模安装:8 个核心 磁盘空间这取决于您使用 SonarQube 分析的代码量。 对于小规模安装:30GB 的存储空间。
小规模安装通常指的是社区版/开发者版的安装,支持最多 100 万行代码。大规模安装通常指的是企业版的单节点安装,支持最多 5000 万行代码。
支持的操作系统
SonarQube 可以运行在以下操作系统上:
Linux (x64, AArch64)Windows (x64)macOS (x64, AArch64)
硬件配置建议
SonarQube 在后台使用 Elasticsearch。为确保 SonarQube 的良好性能,您需要遵循与 Elasticsearch 使用相关的以下建议。
CategoryRecommendationDisk可用磁盘空间是绝对要求。Elasticsearch 实施了一种安全机制,当磁盘使用达到 95% 的水位线时,会锁定所有索引为只读模式,以防止磁盘被索引数据淹没。磁盘访问很容易成为 Elasticsearch 的瓶颈。如果条件允许,使用 SSD 的性能远远优于任何旋转介质。使用 SSD 的节点在查询和索引性能上都有显著提升。如果使用旋转介质,尽量选择最快的磁盘(高性能服务器磁盘,15,000 RPM 驱动器)。使用 RAID 0 是提高磁盘速度的有效方式,适用于旋转磁盘和 SSD。由于 Elasticsearch 具有副本和数据库主存储,因此不需要使用 RAID 的镜像或奇偶校验变体。请勿使用远程挂载的存储,如 NFS、SMB/CIFS 或网络附加存储(NAS)。它们通常速度较慢,延迟更大且平均延迟波动较大,且是单点故障。您可以将
软件要求
CategoryRequirementWeb浏览器Microsoft Edge: 最新版本Mozilla Firefox: 最新版本Google Chrome: 最新版本Safari: 最新版本Java仅适用于从 ZIP 文件进行的服务器安装。- Oracle JRE 或 OpenJDK- Java 版本 17- 建议:使用 Java CPU(critical patch update)版本。注意:SonarQube 能够分析任何类型的 Java 源文件,无论它们符合哪个版本的 Java。
数据库要求
下表展示了支持的数据库类型:
PostgreSQL,version11到15;SQL Server:2014,2016,2017,2019,2022;Oracle:21C, 19C, XE Editions。
更多信息查看:
https://docs.sonarsource.com/sonarqube/latest/setup-and-upgrade/installation-requirements/database-requirements/
2.2 安装
安装概述
支持从 ZIP 文件或 Docker 镜像创建单节点 的SonarQube 实例。有关 Kubernetes 安装,请参阅《在 Kubernetes 上部署 SonarQube》。有关集群设置(数据中心版本)的详细信息,请参阅《将服务器安装为集群》。
按以下步骤在服务器端安装 SonarQube:
安装 SonarQube 数据库。安装 SonarQube 服务器并执行基本设置。可以选择从 ZIP 文件或 Docker 镜像安装服务器。如有必要,执行高级设置。
一个SonarQube实例包括下面三个组件:
运行 SonarQube 的服务器包括以下进程:
提供 SonarQube 用户界面的 Web 服务器。基于 Elasticsearch 的搜索服务器。负责处理代码分析报告并将其保存到 SonarQube 数据库中的计算引擎。
数据库用于存储以下内容:
在代码扫描过程中生成的代码质量和安全性的指标和问题。SonarQube 实例的配置。
在您的构建或持续集成服务器上运行的一个或多个扫描器,用于分析项目。
为了获得最佳性能,SonarQube 服务器和数据库应安装在不同的主机上,并且服务器主机应为专用主机。服务器和数据库主机应位于同一网络中。
所有主机必须进行时间同步。
安装实践
本文记录使用docker-compose编排进行SonarQube的安装,数据库使用PG。Docker Engine版本建议大于等于 20.10。
Linux 系统上的安装前步骤
配置主机以符合 Elasticsearch 要求
由于 SonarQube 使用嵌入式 Elasticsearch,请确保您的主机配置符合 Elasticsearch 生产模式的要求以及文件描述符配置。
配置最大打开文件数和其他限制
必须确保:
进程可以拥有的最大内存映射区域数量(vm.max_map_count)大于或等于 524288。最大打开文件描述符数量(fs.file-max)大于或等于 131072。运行 SonarQube 的用户可以打开至少 131072 个文件描述符。运行 SonarQube 的用户可以打开至少 8192 个线程。
您必须在主机系统上设置这些限制,无论安装类型如何:
对于 Docker 安装:这些设置将应用于 Docker 容器。对于 Kubernetes 部署:请参阅这些指南。
要检查和更改这些限制,请以运行 SonarQube 的用户身份登录,并根据该用户的类型按以下步骤进行操作:
使用以下命令验证上述参数的值:
sysctl vm.max_map_count
sysctl fs.file-max
ulimit -n
ulimit -u
要修改 max map count 和 file-max,在 /etc/sysctl.d/99-sonarqube.conf 文件中插入以下内容(如果使用默认文件 /etc/sysctl.conf,请插入其中,但不推荐这样做)。要应用更改,请运行相应的 Linux 命令:
vm.max_map_count=524288
fs.file-max=131072
要修改运行 SonarQube 用户的限制,在 /etc/security/limits.d/99-sonarqube.conf 文件中插入以下内容(如果使用默认文件 /etc/security/limits.conf,请插入其中,但不推荐这样做),其中 sonarqube 是运行 SonarQube 的用户。要应用更改,请运行相应的 Linux 命令:
sonarqube - nofile 131072
sonarqube - nproc 8192
docker-compose安装SonarQube
创建docker-compose.yml文件,内容如下:
services:
sonarqube:
image: sonarqube:lts-community
hostname: sonarqube
container_name: sonarqube
read_only: true
depends_on:
db:
condition: service_healthy
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
- sonarqube_temp:/opt/sonarqube/temp
ports:
- "9000:9000"
db:
image: postgres:15
healthcheck:
test: ["CMD-SHELL", "pg_isready"]
interval: 10s
timeout: 5s
retries: 5
hostname: postgresql
container_name: postgresql
environment:
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
POSTGRES_DB: sonar
volumes:
- postgresql:/var/lib/postgresql
- postgresql_data:/var/lib/postgresql/data
volumes:
sonarqube_data:
sonarqube_temp:
sonarqube_extensions:
sonarqube_logs:
postgresql:
postgresql_data:
启动容器:
[root@sonar-server sonarqube]# ls
docker-compose.yml postgres-15.tar.gz snoarqube-lts-community.tar.gz
[root@sonar-server sonarqube]# docker-compose up -d
[+] Running 3/3
✔ Network sonarqube_default Created 0.1s
✔ Container postgresql Healthy 11.1s
✔ Container sonarqube Started 11.6s
启动完毕后,使用浏览器访问http://localhost:9000即可访问SonarQube,默认系统管理员账号密码为admin/admin。
说明
上述vaolumes本地路径默认为:/var/lib/docker/volumes/。
3. 参考架构
该部分的详细情况参考官方文档:
https://docs.sonarsource.com/sonarqube/latest/setup-and-upgrade/reference-architectures/up-to-10m-loc/
开发者版/企业版的参考架构(支持最多 1000 万行代码)
下面页面描述了一个 SonarQube 实例的架构,该实例在正常使用模式下可以支持最多 1000 万行代码,并且不具备高可用性设置。
该参考架构涵盖以下组件:
安装了 SonarQube(开发者版或企业版)和 nginx HTTPS 代理的虚拟机主机。在专用主机上运行的 PostgreSQL 数据库。与 GitHub Actions 集成的分析。通过 GitHub.com 进行身份验证。使用 Prometheus 进行监控。通过 SMTP 中继发送外发电子邮件通知。
企业版的参考架构(支持最多 5000 万行代码)
该架构描述了一个 SonarQube 企业版实例的设置,该实例在正常使用模式下可以支持最多 5000 万行代码,并且不具备高可用性设置。
该参考架构涵盖以下组件:
安装了 SonarQube 企业版和 nginx HTTPS 代理的虚拟机主机在专用主机上运行的 PostgreSQL 数据库与 Jenkins CI 集成的分析通过 GitHub Enterprise 进行拉取请求报告和身份验证使用 Prometheus 进行监控通过 SMTP 中继发送外发电子邮件通知
4. 相关资料
github地址:https://github.com/SonarSource/sonarqube官方文档:https://docs.sonarqube.org/latest/setup/install-server/helm chart仓库:https://artifacthub.io/packages/helm/sonarqube/sonarqube