一、引言

上一篇文章之后 我们应该已经成功的部署了sonarqube程序,这一篇文章我们就来进行一次简单的本地扫描。 优点:

  • 安全性:你可以在任何你信任的环境下执行扫描工作,而不是依赖外部安全能力
  • 即时反馈: 开发者可以在编写代码时获得即时反馈,了解其代码的质量和潜在问题,从而及时做出调整。
  • 灵活性: 开发者可以根据需要轻松地自定义扫描配置,以满足特定的需求或标准。

缺点:

  • 资源消耗: 在开发者的本地机器上运行静态代码分析工具可能会消耗大量的系统资源,特别是对于较大的代码库。

  • 依赖问题: 本地扫描的结果可能会受到开发者本地环境中使用的工具版本和配置的影响,这可能会导致与在其他环境中运行的扫描结果不一致。

二、基础配置

由于通常情况下扫描会在服务器上执行,本篇的配置会涵盖mac和linux 2个部分,方便本地调试和服务器定时任务。 这一篇主要通过手动操作来让大家了解一下流程,下一篇的话会通过代码来执行全自动扫描。

2.1 sonarqube配置

登录sonarqube,选择 项目 -〉新增项目 -〉手工

sonarqube使用指北(二)-如何启动一次完整的本地扫描
这里我们需要为项目配置名称。
sonarqube使用指北(二)-如何启动一次完整的本地扫描
注:项目标识是唯一的,不允许重复,而显示名是可以重复的,为了便于区分我们可以将显示名和项目标识设置为同一个。 这里我们创建test项目。
sonarqube使用指北(二)-如何启动一次完整的本地扫描
选择本地。
sonarqube使用指北(二)-如何启动一次完整的本地扫描
我们需要创建一个令牌来实现授权,这样本地执行的扫描才能通过权限认证。可以根据自己的需要来选择过期时间,如果项目长期存在可以选择永不过期。 注:

  • 这里的创建的令牌只允许在该项目使用,如果想偷懒的话需要创建全局令牌。
  • 令牌创建好后 只会显示一次,需要手动保存,如果未存储也不无法再次查看 ,只能重新创建。
  • 令牌的创建步骤不是每个项目都需要点击一次,实际上每个扫描项目只需要在扫描时提供一个可用的令牌即可。 成功创建令牌之后点击下一步就会生成一个执行命令,sonarqube支持maven、gradle、.net和其他一些语言的运行方式。本地就以主流的java maven为例。
    sonarqube使用指北(二)-如何启动一次完整的本地扫描
    注:
  • projectKey就是对应的项目标识。
  • url为sonarqube的访问地址,可以根据实际环境自行修改。
  • login为上一步生成的令牌。 sonarqube的配置在这就结束了,接下来我们只需要在项目根目录下执行该命令即可。

2.1.2 配置通用令牌

上一节说到,如果想要在所有项目中使用一个通用令牌的话,可以单独创建一个。 点击 头像 -〉我的账号 -〉安全

sonarqube使用指北(二)-如何启动一次完整的本地扫描
这里我们示范创建一个test的扫描令牌,类型为全局分析令牌则表示该令牌只能用执行扫描任务,无其他的用户操作权限。
sonarqube使用指北(二)-如何启动一次完整的本地扫描

2.2 java配置

java环境的配置相对简单,本文就简单介绍一下相对复杂的mac下安装java13的场景。 直接使用brew进行安装可能会出现报错,下文提供一个手动安装的方法。 首先打开jdk.java.net/archive/ 找到mac对应jdk13版本进行下载。 解压文件得到此时右键访达 -》前往 ,输入 /usr/local/opt,将解压好的文件放到该目录下。为了方便将文件夹改名为jdk-13.0.2 注: /usr/local/opt为插件安装的默认地址,你也可以在你喜欢的任何地方作为安装目录。

由于文件是网络下载的,默认出于不信任状态,即使配置了环境变量也会导致java无法正常执行。 执行

xattr -dr com.apple.quarantine /usr/local/opt/jdk-13.0.2
#如果不好使的话就直接执行xattr -dr  /usr/local/opt/jdk-13.0.2

mac下终端通常为zsh,因此编辑配置文件~/.zshrc 添加

export JAVA_HOME=/usr/local/opt/jdk-13.0.2/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH

执行 source ~/.zshrc后,执行java -version,出现相关信息则安装成功

sonarqube使用指北(二)-如何启动一次完整的本地扫描

注: 如果你的shell环境不是zsh的话,也可以检查.bashrc或 ~/.bash_profile。~~

2.3 maven仓库配置

2.3.1 mac下安装maven

mac下比较简单,执行:

brew install maven

安装完成后执行

mvn -version

sonarqube使用指北(二)-如何启动一次完整的本地扫描
如果有正常输出则证明安装完成。

2.3.2 linux下安装maven

我们需要从官网下载maven的二进制包,访问 archive.apache.org/dist/maven/… 下载tar.gz 或zip包都可以,本文以最新的4.0版本为例。

sonarqube使用指北(二)-如何启动一次完整的本地扫描
也可以在服务器上通过wget的方式直接下载到服务器上。 使用

tar -xvzf apache-maven-4.0.0-alpha-13-bin.tar.gz
或
unzip  apache-maven-4.0.0-alpha-13-bin.zip

完成解压后,需要创建系统变量

vi /etc/profile

在文件最下面添加如下变量

export MAVEN_HOME=/usr/local/maven-4.0.0
export PATH=${MAVEN_HOME}/bin:$PATH

添加完成后执行

source /etc/profile

执行mvn -version。 出现信息则表示环境变量添加成功。

sonarqube使用指北(二)-如何启动一次完整的本地扫描
注:很多ai教程(chatgpt)会提示让你编辑.bashrc或.bash_profile 这个纯属瞎编的,centos下并不存在这2个文件 也无法生效,请注意甄别。

2.3.3 配置maven仓库

不论是mac还是linux都可以通过mvn -version查看自己的maven安装配置。 访问安装目录/conf/settings.xml 如果是公共仓库不需要特定源配置,如果您使用的私有仓库,本文会以nexus仓库进行示例。 编辑settings.xml 添加

    <server>
      <id>nexus-snapshots</id>
      <username>user</username>
      <password>password</password>
    </server>

我们可以执行mvn help:effective-settings 来检查配置是否生效

sonarqube使用指北(二)-如何启动一次完整的本地扫描

接下来这里我们需要配置访问仓库需要的账号密码,用于连接远程nexus仓库。 在项目的pom.xml 中添加如下 (如项目中的文件未指向私有仓库):

    <repositories>
        <repository>
            <id>nexus-public</id>
            <url>https://url/repository/maven-public/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
                <updatePolicy>always</updatePolicy>
                <checksumPolicy>fail</checksumPolicy>
            </snapshots>
        </repository>
    </repositories>

至此maven的配置就完成了。

2.4 sonarqube-scanner-cli 配置

如果需要在本地执行扫描,我们还需要安装一个本地扫描器,就是sonarqube-scanner-cli 访问 docs.sonarsource.com/sonarqube/l… 下载不同系统对应的版本。

2.4.1 mac下配置sonar-scanner

还是以mac为例,解压下载下来的安装包 移动至/usr/local/opt/ 目录下,改名为sonar-scanner 执行

xattr -dr com.apple.quarantine /usr/local/opt/sonar-scanner
#如果不好使的话就直接执行xattr -dr  /usr/local/opt/sonar-scanner

编辑 ~/.zshrc,添加:

export PATH="/usr/local/opt/sonar-scanner/bin:$PATH"

执行 source ~/.zshrc 更新配置。 执行sonar-scanner -v,出现信息则表示安装成功。

sonarqube使用指北(二)-如何启动一次完整的本地扫描

2.4.2 linux下配置sonar-scanner

linux下的安装相对简单,解压对应版本的压缩包。 编辑 /etc/profile 添加

export SONAR_SCANNER=/data/code-review/sonar-scanner-5.0.1.3006-linux
export PATH=${SONAR_SCANNER}/bin:$PATH

执行source /etc/profile 执行sonar-scanner -v,如果有信息则安装成功。

sonarqube使用指北(二)-如何启动一次完整的本地扫描

三、执行代码扫描

全部配置完成后现在就可以正常执行扫描了。 在代码根目录下执行 二中生成的sonarqube命令

sonarqube使用指北(二)-如何启动一次完整的本地扫描
可以看到项目已被正常进行扫描,如果之前的maven配置正常的话,就会从指定的私有仓库拉取jar包。

sonarqube使用指北(二)-如何启动一次完整的本地扫描
扫描全部完成后,我们就可以在sonarqube平台上查看到全部的扫描结果了。
sonarqube使用指北(二)-如何启动一次完整的本地扫描
至此一次手工的代码扫描就完成了,你可以在任何代码编写完成之后执行扫描,在项目key不变的情况下,sonarqube会对比2次代码扫描的差异内容并给出增量的测试结果。
sonarqube使用指北(二)-如何启动一次完整的本地扫描

下一章我们会在手工扫描的基础上,通过python代码实现自动化创建任务并扫描。感兴趣的小伙伴可以点赞关注一下~