代码质量管理平台SonarQub,以及SonarScanner和SonarQube for IDE的闭环使用
代码质量管理平台SonarQub,以及SonarScanner和SonarQube for IDE的闭环使用
文章目录
一、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才能更好的享受代码自动检视工具的功能。
更多推荐
所有评论(0)