使用Sonar进行项目代码扫描

前言

Sonar qube是一款市面上使用较为广泛的代码审查工具,支持20+ 种编程语言,经过Sonar scanner代码审查后把出现在代码里的问题都暴露出来并进行分类,开发人员根据严重程度解决排期,将问题数量降低,这样就可以创建并维护一个干净的代码基础。

处于安全考虑,项目在上线之前往往会先做一次代码安全审查,从而降低新变动带来的安全隐患,所以掌握Sonar这个工具的使用也十分有必要,本篇文章也将对Sonar的使用方式和注意事项进行讲解,希望对各位读者有所帮助。

一、sonar简介以及安装步骤

(一)Sonar是什么?

简单来说,Sonar就是一款功能强大的代码审核工具,可以帮助开发团队更好的维护项目代码。同时,Sonar只是一个统称,这款工具不是单纯一个应用,一般来说我们会使用Sonar QubeSonar scanner这两个组件来搭配使用。Sonar Scanner负责对代码进行扫描,同时会将扫描的结果上传到Sonar Qube服务器上,而Sonar Qube负责对扫描的结果进行可视化的展示。两个组件间的关系图如下:

image

需要注意的是,为了简化用户的操作,Sonar对外提供了良好的插件支持,比如maven插件和idea插件,由于演示的项目也是一个maven构建的项目,所以我们后续也将采用maven插件的方式来对项目代码进行扫描,这样的话我们就不再需要额外下载Sonar Scanner这个软件了。

(二)使用Sonar Qube的前提
1. 安装JDK11

Sonar Qube从7.9版本开始,就要求有JDK11的运行环境,所以在使用Sonar Qube之前,建议先在本地安装JDK11

image

JDK11的下载可以参考这篇文章:https://blog.csdn.net/climber16/article/details/83242425

2.安装数据库

Snoar Qube支持多种数据库来存储扫描报告,如果只是作为测试使用,可以不安装任何数据库,直接使用Sonar Qube自带的H2数据库。

(三)如何下载Sonar Qube

Sonar Qube的下载十分简单,我们直接去官网下载即可。下载地址如下:(https://www.sonarqube.org/downloads/),一般来说下载社区版本就可以满足我们的需要。

image

如果不想要下载太高的版本,在下载页的下方可以自行选择历史版本进行下载。(我本人的话是选择了8.2这个版本)

image

二、如何使用Snoar进行项目代码扫描

(一)启动Sonar Qube应用

将下载得到的压缩包解压后,我们进入到/bin/windows-x86-64目录中(如果是linux或者mac系统,则自行在/bin目录中选择对应的入口),双击StartSonar.bat启动服务。(注意,本地要有JDK11或者更高版本运行环境)

image

启动后,等待应用启动完毕

image

(二)登录后台管理页面

访问http://localhost:9000,并点击右上角的Log in进行登录。初始账号密码均为admin

image

(三)在Snoar Qube页面上创建项目和进行代码扫描
1、 创建一个新项目

(这个操作只需要进行一次,后面对同个项目再进行扫描的时候就不需要再执行了)

image

2、设置项目名

image

这里的project key会被用在后面的maven命令中,最好不要有特殊字符。display name表示这个项目对外的展示名称,这个做到见名知义即可。

3、生成token令牌

输入token之后,点击generate按钮,生成加密后的秘钥

image

生成后,点击continue进入下一步操作:

image

4、选择项目参数,生成执行脚本命令

根据实际的项目需要,生成对应的执行命令。(我这里是Java开发语言,Maven构建工具)

命令生成好后,我们可以点击Copy来将maven命令进行复制,进入第五步操作

image

5、对项目代码进行扫描

注意:若打算将最终扫描结果导出为PDF文档,建议在扫描之前先按照第三章的内容安装好PDF插件,再进行扫描操作!!!如果只是本地看代码扫描结果即可的话,则可忽略这段提示~

扫描方式一:直接在项目根路径下打开cmd窗口,执行第4步生成的maven命令

(这里需要注意,直接复制的命令带有\,我们要先把这些符号给去掉才能执行)

image

等待maven插件对项目扫描完成后,我们就可以在Sonar Qube管理页面上找到扫描报告了

image

我们可以在project菜单栏中看到刚刚扫描得到的报告,点进去后就可以看到报告中具体的分析结果了。

image

(四)简化代码扫描步骤

这种方式虽然便捷,但是每次分析代码时都得输入一长串的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模块,在页面上手动配置不扫描的文件路径

image

(其实还可以在maven的setting文件中配置,但是不同的Sonar Qube版本的配置存在一定差异,为了防止误导,这里就不做演示了,有需要的话可以自己在官网上面看就行)

3、为什么项目中有js、css代码,但是扫描的时候没有对应的分析结果?

一些低版本的Sonar Qube默认是没有自带js、jsp、css这类语言的扫描插件的,如果想要有这些语言的扫描结果的话,需要去官网安装对应的插件,或者是安装高版本的Snoar Qube就行。

image

三、使用插件进行结果导出

1、下载``PDF`插件

Snoar Qube默认没有导出报告的功能,如果想要将分析结果导出,需要单独安装一个PDF插件,下载地址如下:

https://gitee.com/zzulj/sonar-pdf-plugin

2、调整插件项目根路径的pom文件

主要是修改里面的sonar.version版本号,改成你本地使用的Snoar Qube版本。

image

3、对插件项目执行如下命令,生成对应的jar包
mvn clean package -Dmaven.test.skip=true -Dlicense.skip=true
4、把插件包放到指定目录中

将生成的sonar-pdfreport-plugin-4.0.0.jar放到Snoar Qube安装目录的plugins路径下

image

5、在Snoar Qube管理页面上进行PDF插件配置

主要配置passwordusername就行了

image

配置完成后,需要在Snoar Qube配置文件中进行配置

image

6、配置完成后重新启动,此时我们再扫描代码后,就在Snoar Qube上进行PDF文件导出了~

image

四、使用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/

posted @ 2022-05-12 09:20  moutory  阅读(179)  评论(0编辑  收藏  举报