一、SonarQub、SonarScanner、SonarQube for IDE是什么?

1、SonarQube 是什么?

SonarQube 是一个开源的代码质量管理平台,主要用于持续检测代码中的质量问题和潜在的安全漏洞。它提供了丰富的插件支持,能够支持包括 java, C#, C/C++, PL/SQL, Cobol, JavaScrip, Groovy 等等二十几种编程语言的代码质量管理与检测。并且可以与CI/CD管道无缝集成。并且可以导出检测报告,导出功能需要添加插件。

主要功能:
代码质量分析:通过静态代码分析检测代码中的缺陷、漏洞和坏味道。
技术债务管理:提供对技术债务的量化评估,帮助团队了解和管理代码库的健康状况。
报告和仪表盘:生成详细的分析报告,并通过Web界面展示各种指标和趋势。
多语言支持:支持多种编程语言(如Java、C#、JavaScript、Python等)的代码分析。

部署方式:
可以在本地服务器或云端部署。
提供社区版、开发者版、企业版和数据中心版等多种版本,满足不同规模和需求的企业使用。

2、SonarScanner 是什么?

SonarScanner 是用于执行代码扫描的命令行工具。它是SonarQube的核心组件之一,负责从源代码中提取信息并将其发送到SonarQube服务器进行分析。

主要功能:
代码扫描:根据配置文件(如sonar-project.properties或Maven POM文件)执行静态代码分析。
结果上传:将扫描结果上传到SonarQube服务器进行存储和展示。
多语言支持:支持多种编程语言的代码扫描,确保跨语言项目的统一分析标准。

常见类型:
SonarScanner CLI:适用于通用项目的命令行工具,通常用于非Maven/Gradle项目。
SonarScanner for Maven:专门针对Maven项目的插件,简化了Maven项目的扫描配置。
SonarScanner for Gradle:类似地,适用于Gradle项目的插件。

3、SonarQube for IDE 是什么?

SonarQube for IDE(旧:SonarLint) 是IDEA的插件,将SonarQube的功能直接集成到IDEA中。这使得开发者可以在编写代码的过程中实时获取代码质量反馈,而无需等待CI/CD管道的完整分析结果。

主要功能:
实时反馈:在编写代码时立即显示代码问题,帮助开发者及时修复问题。
问题定位:高亮显示代码中的问题,并提供详细的解释和修复建议。
规则集应用:允许开发者选择和应用特定的质量规则集,以符合项目或组织的标准。

4、三者的关系

SonarQube 是整个系统的中心,提供了一个集中化的平台来管理和展示代码质量分析的结果。
SonarScanner 是执行实际代码扫描的工具,它从开发环境或CI/CD管道中运行,收集代码分析数据并将结果上传到SonarQube服务器。
SonarQube for IDE 则是将部分SonarQube的功能前置到开发者的日常开发环境中,使开发者能够在编写代码的同时获得即时的反馈,从而提高代码质量。


二、SonarQube安装使用(Windows环境)

1.下载说明

官网最新版本
历史版本
SonarQube的版本差距很大,不同版本对应不同的JDK运行环境和不同的版本数据库存储。使用过程中记得调研版本兼容。

2.下载

本文使用SonarQube7.8为案例,SonarQube7.8是最后一个支持JDK1.8和mysql数据库的版本,SonarQube 7.9开始需要Java 11且不支持mysql了,更加往后版本需要Java17等。

2.1、下载SonarQube7.8的ZIP文件并解压。
在这里插入图片描述
在这里插入图片描述

2.2、到sonarqube-7.8\conf中找到配置文件sonar.properties,配置数据库连接。在配置文件可以看到该版本对mysql的版本支持为MySQL >=5.6 && <8.0。

sonar.jdbc.username=root
sonar.jdbc.password=Digitalor@MCRFID1688
sonar.jdbc.url=jdbc:mysql://192.168.10.43:19131/sonar?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true

在这里插入图片描述

2.3、配置好数据库即可启动SonarQube服务。不配置数据库也可直接启动服务,若是不配置数据库就是使用SonarQube内置的存储,不推荐。
到sonarqube-7.8\bin\windows-x86-64路径下启动StartSonar.bat即可开启服务。默认访问地址为http://localhost:9000,用户名/密码:admin/admin。
在这里插入图片描述

2.4、创建项目
创建项目key和名称
在这里插入图片描述
创建token令牌,第一次创建选Generate a token,后续可以选择Use existing token。
在这里插入图片描述

成功创建项目,可按照下面方式将代码推送到服务进行检视。在SonarScanner的使用中讲述通过maven插件检视代码并推送结果到服务。
在这里插入图片描述


三、SonarScanner 使用

1.maven插件下载,版本一定要和SonarQube服务版本对齐,因为使用SonarQube7.8版本,所以我们下载对应3.7.0.1746版本。

    <build>
        <plugins>
            <plugin>
                <groupId>org.sonarsource.scanner.maven</groupId>
                <artifactId>sonar-maven-plugin</artifactId>
				<!--支持java17-->
<!--                <version>3.9.1.2184</version>-->

				<!--支持java8-->
                <version>3.7.0.1746</version>
            </plugin>
        </plugins>
    </build>

下载后maven工具中会出现sonar命令,添加配置后每次检视前运行该命令就行。
在这里插入图片描述

2.参数配置

为了运行方便,我们将参数写入pom文件,后续每次在maven中运行sonar即可。

<properties>
        <sonar.projectKey>zhonghang</sonar.projectKey>
        <sonar.projectName>name</sonar.projectName>
        <sonar.projectVersion>1.0</sonar.projectVersion>
        <sonar.projectDescription>描述</sonar.projectDescription>
        <sonar.host.url>http://localhost:9000</sonar.host.url>
        <sonar.login>0f495c1d82f77cfc074d3c686d077e4e04529348</sonar.login>
        <sonar.moduleKey>${project.artifactId}</sonar.moduleKey>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
</properties>

必须:
sonar.projectKey:是SonarQube创建项目中对应的key。
sonar.host.url:是SonarQube的访问地址
sonar.login:是SonarQube创建项目中对应的token

非必须:
sonar.moduleKey:是在多模块的项目中给子模块定义唯一性,防止代码检视的时候运行错误或检测覆盖或检测遗漏。
sonar.projectName:项目名称
sonar.projectVersion:项目版本
sonar.projectDescription:项目描述
project.build.sourceEncoding:解决编码问题
project.reporting.outputEncoding:解决编码问题
java.version:指定JDK版本

3.运行sonar:sonar效果和SonarQube服务

在这里插入图片描述

4.SonarQube查询检测结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


四、SonarQube for IDE安装使用

SonarQube for IDE不支持老版本的SonarQube,我下载了最新的SonarQube25.2.0.102705版本来支持SonarQube for IDE使用。若想支持老版本的SonarQube,可去网上找找旧版插件SonarLint使用。

1.下载

到IDEA的插件中心进行下载
在这里插入图片描述

2.配置

2.1、到setting->tools中找到SonarQube for IDE进行配置。
在这里插入图片描述

2.2、点击+号添加服务连接配置,输入名称、类型选择第二个输入SonarQube服务地址。next。
在这里插入图片描述
2.3、填入SonarQube中创建项目生成的token令牌。三个next直接完成。
在这里插入图片描述
配置完成如下:
在这里插入图片描述

2.4、简单使用
点击IDEA下方的图标
在这里插入图片描述
对选中文件进行代码检视:
在这里插入图片描述

对所有文件进行代码检视:
在这里插入图片描述

代码检视情况:
在这里插入图片描述


五、导出报告

1.下载

SonarQube本身没有下载检测报告的功能,需要安sonar-pdf-plugin插件。
下载地址

插件也需要对应SonarQube版本,我这里选择的是sonar-pdfreport-plugin-3.0.3.jar
直达sonar-pdfreport-plugin-3.0.3.jar地址

在这里插入图片描述

2.使用插件

把下载好的插件放到Sonarqube安装目录的extensions/plugins目录下,重启Sonarqube服务即可。
在这里插入图片描述

3.配置账号和密码

插件上传并重启Sonarqube服务后,管理界面中就会出现PDF Report的界面,配置相应的Password和Username即可。
在这里插入图片描述

4.下载报告

选择某个检测结果,点击下载即可
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


总结

使用过程中遇到的主要是三个组件版本之间的兼容问题。

SonarQube25.2.0.102705+SonarScanner3.9.1.2184+SonarQube for IDE,SonarQube for IDE可用。但是不能使用SonarScanner将JDK8的代码检视并上传,存在JDK的版本编译兼容问题。

SonarQube7.8+SonarScanner3.7.0.1746+SonarQube for IDE,SonarScanner可用并能将JDK8的代码检视并上传。SonarQube for IDE不可用,因为SonarQube版本过低。

较高版本SonarScanner去检视JDK低版本(例:JDK8)环境项目代码,存在有JDK版本导致的编译不兼容问题。建议项目代码升级到JDK17才能更好的享受代码自动检视工具的功能。

Logo

科技之力与好奇之心,共建有温度的智能世界

更多推荐