Sonar代码扫描,你会使用吗?
1.前言
在项目上线之前一般都会进行安全审查及漏洞扫描,而Sonar qube就是一款市面上使用较为广泛的代码审查工具,经过Sonar scanner
代码审查后把出现在代码里的问题都暴露出来并进行分类,开发人员根据严重程度解决排期,将问题数量降低,这样就可以创建并维护一个干净的代码基础,从而减少项目上线后的各种安全问题。因此,可以清楚的知道,Sonar Scanner
负责对代码进行扫描,同时会将扫描的结果上传到Sonar Qube
服务器上,而Sonar Qube
负责对扫描的结果进行可视化的展示。
2.安装
对于Sonar,有两种安装方式,一种是使用zip压缩包方式,另一种是使用docker进行安装。
2.1 zip方式安装
说明:Sonar Qube
从7.9版本开始,就要求有JDK11+的运行环境
,所以前提是本地已安装JDK11或更高的版本。这里以JDK17 + Sonar 10.2.1为例进行说明。
在官网下载后是一个压缩包,需要解压。网盘下载:链接:https://pan.baidu.com/s/1KIw-5YSW8s67maICyLqYnw 提取码:6666
2.2 docker方式安装
若本地有docker环境,则使用docker方式更加方便。
拉取镜像并启动
docker run -d --name sonarqube -e SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true -p 9000:9000 sonarqube:latest
端口是9000.
3.启动和扫描
3.1 启动
这里的启动是以zip方式安装进行说明,如果是docker方式安装,则直接启动容器即可。
1)打开/bin/windows-x86-64
目录(这里选择Windows系统,还有其他系统可自行选择)
双击StartSonar.bat
启动服务(启动前确保本机有JDK11+)
启动后,应用启动完成如下图:
3.2 登录后台管理界面
在浏览器访问http://localhost:9000,进入后台管理界面,登录界面输入用户名和密码(默认都是admin),首次进入需要修改密码,进入首页后是空的,需要创建项目
在创建项目界面输入项目名称和key,这些可以根据自己的需求填写
这里就选择使用统一的code,点击“create project”
选择项目的来源,可以通过Jenkins、github等多种来源,这里就以本地(Local)进行说明
点击“Generate”生成认证的token,然后点击“continue”
构建方式这里就先选择maven,就会生成对应的maven命令,先复制下来,去掉反斜杠,将其改为一行
3.3 创建maven项目,进行代码扫描
创建一个Springboot项目(普通的maven项目也可),其中代码如下:
package com.zxh.service; import java.math.BigDecimal; import java.util.List; public class TestService { public void test1() { List<String> l = null; l.add("1"); } public void test2() { double d = 1.1; BigDecimal bd1 = new BigDecimal(d); BigDecimal bd2 = new BigDecimal(1.1); String s="1242939110932921"; String s2=s.replaceAll("1","-"); System.out.println(s); } }
打开当前项目目录,在终端中执行上述的maven命令(前提是maven配置了环境变量,这里先使用命令方式,后续后其他方式),执行成功如下图所示
可能出现的问题:
问题1:若执行maven时出现下面错误,是由于新版jdk安装时没有生成jre导致的
则需要手动指定jdk的路径
问题2:手动执行扫描命令时报错
这个原因是因为输入的命令有问题,被cmd给截取了。但是明明是从sonar复制的命令,怎么会有错误呢?其实是操作系统的锅
只需要给带参数的地方使用双引号即可(如果不报错则无需添加)
执行成功后,在首页即可看到对应的bug和异味等信息
点击进去,看到的就是bug原因列表
再继续深入进去,看到的就是产生bug的代码、原因及处理建议(使用上下箭头进行问题的切换)
3.4 安装中文插件
上述界面全是英文的,当然也提供了中文的插件。
在搜索框输入Chinese搜索中文汉化包并安装,如果遇到首次安装插件报错,重启服务后再安装即可
安装完成后会提示需要重启服务
重启后就是中文版本了
上述是直接在管理界面安装插件,sonar也提供了本地安装的方式。
把需要安装的jar下载到本地,放到 <SONARQUBE_HOME>/extensions/plugins
目录即可。
3.5 扫描配置到maven
上面在进行扫描时,都需要那么长的一串命令,显得有些麻烦,这时可以将其配置到maven中,就会简单许多。
1)在setting.xml配置sonar的信息
代码:
<pluginGroup>org.sonarsource.scanner.maven</pluginGroup> <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>
2)在项目根目录下执行安装和扫描
mvn clean install
mvn sonar:sonar
这样每次改完代码后,需要执行的就很少了,再或者将其写入一个bat文件,后续直接执行即可。
4.常见问题
4.1如何关闭Sonar Qube服务
在window环境关闭Sonar Qube
服务器时,不要直接关掉启动窗口,而是手动使用ctrl+c
在cmd控制台
关闭,否则容易出现应用关闭不彻底的情况。