Sonar代码扫描,你会使用吗?

发布时间 2023-11-09 21:15:34作者: 钟小嘿

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配置了环境变量,这里先使用命令方式,后续后其他方式),执行成功如下图所示

若执行maven时出现下面错误,是由于新版jdk安装时没有生成jre导致的

则需要手动指定jdk的路径

 执行成功后,在首页即可看到对应的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+ccmd控制台关闭,否则容易出现应用关闭不彻底的情况。