写在最前面的话
请务必/尽量选用跟自己项目使用的JDK版本一致的SonarQube。
我使用的是最新版本,依赖JDK21,而我的项目用的是JDK8。走了不少弯路。
一、部署篇
本次部署在Windows 10 系统。
1.1 JDK 17+
本次使用SonarQube需要JDK 21,下载地址:https://www.oracle.com/java/technologies/downloads/#jdk21-windows
一步步安装完成后,配置环境变量 JAVA_HOME
1.2 SonarQube
本次安装的版本是免费的社区版 25.4.0.105899,下载地址:https://www.sonarsource.com/products/sonarqube/downloads/
安装后解压即可。
1.3 Sonar报告pdf生成插件
sonar-pdf-plugin 最新版本 4.0.1,下载地址:https://gitee.com/zzulj/sonar-pdf-plugin/releases
该插件最新版本更新于2年前,4.0.1不支持本次的SonarQube版本。
我根据Gitee信息修改了一个4.0.2版本,可以支持本版本的SonarQube。
/sonar-pdfreport-plugin-4.0.2.jar
把jar文件放到SonarQube的插件目录 C:\tools\sonarqube-25.4.0.105899\extensions\plugins
1.4 Maven 3.9.9
下载地址:https://maven.apache.org/download.cgi
1.5 PATH变量配置
在PATH中增加 JDK和Marven的执行路径
二、运行与配置
1、启动SonarQube
进入到SonarQube的解压目录,双击startsonar.bat执行,
如果出现如下窗口,则表示启动成功,此时会启动一个9000端口的Web应用。
如果cmd窗口一闪而过,大概率是因为JDK版本太低,或者JAVA_HOME变量没有配置或PATH变量没有配置。
2、登录管理界面
访问地址:http://localhost:9000,初始的账号密码都是admin
3、配置插件
1)先安装一个中文插件方便管理。插件仅针对管理界面,实际的扫描内容还是英文的
需要重启Server才能生效。
2)sonar-pdf-plugin 之前已经放置到插件目录,系统默认是安装好了的。
但是需要做一个配置
用户名和密码就是登录进系统的用户名和密码,默认都是admin
注意每个项目修改会,都要点【保存】按钮进行保存。
如果后续扫描过程中,有如下报错提示,大概率是因为上面没有配置对
至此,基本的配置就完成了。
三、配置扫描项目
第1步,
第2步,
第3步,
第4步,
第5步,
第6步,
第7步,
至此配置完成,拷贝上述文本。
四、扫描项目
1、进入代扫描项目
启动cmd窗口,进入要扫描的项目所在的路径。pom文件所在的路径。
2、执行mvn指令
mvn clean verify sonar:sonar \
-Dsonar.projectKey=testProject \
-Dsonar.projectName='测试项目' \
-Dsonar.host.url=http://localhost:9000 \
-Dsonar.token=sqp_a2b08263a8f321bc8270097d4768ce02654ffc99
执行后会报错,其因为上述命令换行后在Windows下执行是不支持的。
稍微改一下,把内容都挪到一行上,再次执行,等上一会。
mvn clean verify sonar:sonar -Dsonar.projectKey=testProject -Dsonar.projectName='测试项目' -Dsonar.host.url=http://localhost:9000 -Dsonar.token=sqp_a2b08263a8f321bc8270097d4768ce02654ffc99
正常执行后效果如下:
如果有异常就会出现类似前面的红色ERROR提示。不过部分情况下,出现ERROR也可能完成扫描。此时,我们切换回Web管理界面,可以看到“测试项目”已经扫描完成。
3、查看扫描结果
如果没有扫描或扫描失败,就会类似下面一个项目【ifrs-main】显示空白。
点击【测试项目】就可以查看扫描详情了。
在下一界面上点击红色工具条区域,就可以查看具体内容了
4、导出pdf报告
本来对pdf报告是给予厚望的,但是却失望了~~
有一定参考性,但是离一份正式的报告还很远。
但是,扫描结果本身的内容还是足够丰富的,进一步组织极氪。
至此,扫描完成。
五、其他
1、pdf插件4.0.2修改之处
修复方法来源:https://gitee.com/zzulj/sonar-pdf-plugin/issues/IAGECX
2、后续待深入之处
上述pdf插件虽然不好用,但是也给了我一些启示,就是一个外挂条件怎么读取并组织扫描信息的。说明SonarQube提供了API给开发者使用。
再查询时发现,这些信息本身是存储在数据库中的,可以指定安装在外部数据库,默认是安装在内置的一个H2数据库里。
我用客户端连上这个数据库简单看了下,
六、感谢
1、本文的主要内容参考自 CSDN博主 【程序员小肖】的文章 《SonarQube安全扫描》
评论区