使用Sonar进行项目代码扫描
前言
Sonar qube
是一款市面上使用较为广泛的代码审查工具,支持20+ 种编程语言,经过Sonar scanner
代码审查后把出现在代码里的问题都暴露出来并进行分类,开发人员根据严重程度解决排期,将问题数量降低,这样就可以创建并维护一个干净的代码基础。处于安全考虑,项目在上线之前往往会先做一次代码安全审查,从而降低新变动带来的安全隐患,所以掌握Sonar这个工具的使用也十分有必要,本篇文章也将对
Sonar
的使用方式和注意事项进行讲解,希望对各位读者有所帮助。
一、sonar简介以及安装步骤
(一)Sonar是什么?
简单来说,Sonar就是一款功能强大的代码审核工具,可以帮助开发团队更好的维护项目代码。同时,Sonar只是一个统称,这款工具不是单纯一个应用,一般来说我们会使用Sonar Qube
和Sonar scanner
这两个组件来搭配使用。Sonar Scanner
负责对代码进行扫描,同时会将扫描的结果上传到Sonar Qube
服务器上,而Sonar Qube
负责对扫描的结果进行可视化的展示。两个组件间的关系图如下:
需要注意的是,为了简化用户的操作,Sonar对外提供了良好的插件支持,比如maven插件和idea插件,由于演示的项目也是一个maven构建的项目,所以我们后续也将采用maven插件的方式来对项目代码进行扫描,这样的话我们就不再需要额外下载Sonar Scanner
这个软件了。
(二)使用Sonar Qube
的前提
1. 安装JDK11
Sonar Qube
从7.9版本开始,就要求有JDK11的运行环境
,所以在使用Sonar Qube
之前,建议先在本地安装JDK11
。
JDK11
的下载可以参考这篇文章:https://blog.csdn.net/climber16/article/details/83242425
2.安装数据库
Snoar Qube
支持多种数据库来存储扫描报告,如果只是作为测试使用,可以不安装任何数据库,直接使用Sonar Qube
自带的H2数据库。
(三)如何下载Sonar Qube
?
Sonar Qube
的下载十分简单,我们直接去官网下载即可。下载地址如下:(https://www.sonarqube.org/downloads/),一般来说下载社区版本就可以满足我们的需要。
如果不想要下载太高的版本,在下载页的下方可以自行选择历史版本进行下载。(我本人的话是选择了8.2这个版本)
二、如何使用Snoar
进行项目代码扫描
(一)启动Sonar Qube应用
将下载得到的压缩包解压后,我们进入到/bin/windows-x86-64
目录中(如果是linux或者mac系统,则自行在/bin
目录中选择对应的入口),双击StartSonar.bat
启动服务。(注意,本地要有JDK11或者更高版本运行环境)
启动后,等待应用启动完毕
(二)登录后台管理页面
访问http://localhost:9000
,并点击右上角的Log in
进行登录。初始账号密码均为admin
(三)在Snoar Qube
页面上创建项目和进行代码扫描
1、 创建一个新项目
(这个操作只需要进行一次,后面对同个项目再进行扫描的时候就不需要再执行了)
2、设置项目名
这里的project key
会被用在后面的maven命令中,最好不要有特殊字符。display name
表示这个项目对外的展示名称,这个做到见名知义即可。
3、生成token令牌
输入token之后,点击generate
按钮,生成加密后的秘钥
生成后,点击continue
进入下一步操作:
4、选择项目参数,生成执行脚本命令
根据实际的项目需要,生成对应的执行命令。(我这里是Java开发语言,Maven构建工具)
命令生成好后,我们可以点击Copy
来将maven命令进行复制,进入第五步操作
5、对项目代码进行扫描
注意:若打算将最终扫描结果导出为PDF文档,建议在扫描之前先按照第三章的内容安装好PDF插件,再进行扫描操作!!!如果只是本地看代码扫描结果即可的话,则可忽略这段提示~
扫描方式一:直接在项目根路径下打开cmd
窗口,执行第4步生成的maven命令
(这里需要注意,直接复制的命令带有\
,我们要先把这些符号给去掉才能执行)
等待maven插件对项目扫描完成后,我们就可以在Sonar Qube
管理页面上找到扫描报告了
我们可以在project菜单栏中看到刚刚扫描得到的报告,点进去后就可以看到报告中具体的分析结果了。
(四)简化代码扫描步骤
这种方式虽然便捷,但是每次分析代码时都得输入一长串的maven命令才可以得到分析结果,如果想要更加简便的执行命令的话,可以进行如下操作:
1、在maven的setting文件,加入如下配置:
<pluginGroups>
<pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
</pluginGroups>
<profiles>
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<!-- Optional URL to server. Default value is http://localhost:9000 -->
<sonar.host.url> http://localhost:9000</sonar.host.url>
</properties>
</profile>
</profiles>
2、在项目根路径下执行如下命令:
mvn clean install
mvn sonar:sonar
想要获取更多的可配置项,可以在官网中进行获取:https://docs.sonarqube.org/8.2/analysis/analysis-parameters/
(五)常见问题解答
1、如何关闭Snoar Qube
服务
Snoar Qube
想在window环境关闭Sonar Qube
服务器时,建议不要直接关掉,而是手动使用ctrl+c
的方式在cmd控制台
上关闭,否则容易出现应用关闭不彻底,端口仍然被占用的情况出现。
2、如何排除掉不想扫描的代码
在项目配置中,找到Analysis Scope
模块,在页面上手动配置不扫描的文件路径
(其实还可以在maven的setting文件中配置,但是不同的Sonar Qube
版本的配置存在一定差异,为了防止误导,这里就不做演示了,有需要的话可以自己在官网上面看就行)
3、为什么项目中有js、css
代码,但是扫描的时候没有对应的分析结果?
一些低版本的Sonar Qube
默认是没有自带js、jsp、css
这类语言的扫描插件的,如果想要有这些语言的扫描结果的话,需要去官网安装对应的插件,或者是安装高版本的Snoar Qube
就行。
三、使用插件进行结果导出
1、下载``PDF`插件
Snoar Qube
默认没有导出报告的功能,如果想要将分析结果导出,需要单独安装一个PDF
插件,下载地址如下:
2、调整插件项目根路径的pom文件
主要是修改里面的sonar.version
版本号,改成你本地使用的Snoar Qube
版本。
3、对插件项目执行如下命令,生成对应的jar包
mvn clean package -Dmaven.test.skip=true -Dlicense.skip=true
4、把插件包放到指定目录中
将生成的sonar-pdfreport-plugin-4.0.0.jar
放到Snoar Qube
安装目录的plugins
路径下
5、在Snoar Qube
管理页面上进行PDF
插件配置
主要配置password
和username
就行了
配置完成后,需要在Snoar Qube
配置文件中进行配置
6、配置完成后重新启动,此时我们再扫描代码后,就在Snoar Qube
上进行PDF文件
导出了~
四、使用sonar进行一些拓展应用
(一)和jekins结合,定期扫描代码,保持项目代码整洁
具体步骤可参考文章:https://blog.csdn.net/qq_32662595/article/details/122938062
总结
至此,本篇文章到此结束,其实很多小项目都是没有代码安全扫描这个步骤的,但大的项目参与的人员多,一不留神就容易有bug,项目要想保持良好的代码规范,建议可以结合sonar来保证项目代码的稳健性。
参考文章:
1、使用SonarQube分析、改善项目代码质量
https://www.itmuch.com/other/sonar/
2、Sonar官方文档
https://docs.sonarqube.org/7.9/requirements/requirements/