SonarQute 安装与多分支扫描分析插件安装

本贴最后更新于 527 天前,其中的信息可能已经时过境迁

原文发布于:SonarQute 安装与多分支扫描分析插件安装。欢迎使用 RSS 订阅获取最新更新

1. 前言

SonarQube 是一个开源的代码质量管理平台,提供了代码质量管理的各种功能,例如静态检查、代码度量、代码审查等等。

作为一个开源的开发者,对自己写的开源项目还是很有必要进行扫描一下,没有人能保证他写出没有 bug 的程序,但是通过一些工具可以降低我们写 bug 的概率。

2. SonarQube 的安装

你可以直接去 SonarQube 的官网查看安装文档,上面写的还是非常详细的。

链接:https://docs.sonarqube.org/latest/setup-and-upgrade/install-the-server/

2.1 安装环境

这里使用的安装环境是:centos7 + docker

使用数据库为:PostgreSQL

SonarQube 所支持的数据库有:Oracle, Microsoft SQL Server,所以如果你的 DB 不是 PostgreSQL 也没关系。

2.2 创建 SonarQube 对应的文件夹

mkdir /dockerData/sonarqube/sonarqube_data
mkdir /dockerData/sonarqube/sonarqube_extensions
mkdir /dockerData/sonarqube/sonarqube_logs

这里创建的三个文件夹是用来放置 SonarQube 之后会存放的数据和插件以及日志,在 SonarQube 的官网安装教程中更加推荐我们使用 docker volume create 的方式,这是因为 volume 存储在 Docker Host 文件系统的一个路径下,这个路径是由 Docker 来进行管理,路径默认是 /var/lib/docker/volumes/,非 Docker 的进程不能去修改这个路径下面的文件,所以说 Volumes 是持久存储数据最好的一种方式。

相关知识:Docker 数据存储

这里为了方便我们之后安装插件,所以没有采取这种方式的安装。

2.3 拉取镜像

docker run -d --name sonarqube \
    -p 9000:9000 \
    -e SONAR_JDBC_URL=jdbc:postgresql://ip:port/sonarqube?currentSchema=sonar_schema \
    -e SONAR_JDBC_USERNAME=postgresql \
    -e SONAR_JDBC_PASSWORD=password \
    -v /dockerData/sonarqube/sonarqube_data:/opt/sonarqube/data \
    -v /dockerData/sonarqube/sonarqube_extensions:/opt/sonarqube/extensions \
    -v /dockerData/sonarqube/sonarqube_logs:/opt/sonarqube/logs \
    sonarqube:9.9.0-community

在这个命令当中,我们指定了容器的启动的端口,和 SonarQube 连接 DB 的地址,可以根据你使用的 DB 进行调整。最后通过 -v 命令挂载了服务器的目录到 docker 容器当中

启动完成之后,使用你的 ip:端口 进行访问,应该有这样的界面。帐号名和密码都是 admin,第一次登录之后便会要求你更改密码。

如果你的 SonarQube 启动失败,可以通过 docker logs sonarqube 查看错误日志,一般情况下主要的原因有:

  • 连接 DB 失败:检查用户名和密码,或者防火墙
  • sonarqube 写入文件没有权限:因为我们是通过挂载文件夹的形式,sonarqube 会对 dockerData/sonarqube/ 下进行写入文件,需要检查 sonarqube 是否有足够的权限

3. 对一个 SpringBoot 项目进行扫描

这里我们用一个简单的 SpringBoot 例子进行试试,你可以在 github 中找到:https://github.com/MingGH/demo-springboot-simple

或者直接使用你自己的项目也可以。

回到 SonarQube,点击右上角的 Create Project 创建项目,一般来说,使用项目名就好

点击 Set Up

SonarQube 提供了多种方式进行触发扫描,这里我们选择 Locally

创建一个 token,并设置过期时间

因为这个项目使用的 maven,所以我这里便选择了 maven 进行本地触发扫描。

复制生成的这一段命令,到我们本地项目目录下进行执行

执行完成之后,网页便会自动刷新,如:

如果代码中存在问题,那么在 Bugs,Vulnerabilities,Security Hotspots 中可以点进去查看详细的信息。

4. 安装多分支扫描分析插件

在 SonarQube 社区版中,是只能有一个分支被扫描的,需要通过插件的形式来扩展这部分功能

4.1 安装插件

插件地址:https://github.com/mc1arke/sonarqube-community-branch-plugin

打开插件地址,需要注意的是,不同的 SonarQube 版本使用的插件版本也不一样,在上面我们安装的 SonarQube 为 9.9.0,所以下载的插件版本应该是 1.14.0

其实这个插件还提供了自带插件版本的 SonarQube。

下载完插件之后,上传到服务器的 /dockerData/sonarqube/sonarqube_extensions/plugins 目录下,如果 plugins 目录不存在可以自己手动创建,注意不要在 /dockerData/sonarqube/sonarqube_extensions/download 目录下和 plugins 都放置插件的 jar 文件,会导致 SonarQube 启动失败。

此时重启 SonarQube 应该就是可以了。

在回到项目中,可以通过增加 -Dsonar.branch.name 参数来对不同分支的代码进行扫描

mvn clean verify sonar:sonar \
 -Dsonar.projectKey=projectKey \
 -Dsonar.host.url=url \
 -Dsonar.login=token \
  -Dsonar.branch.name=develop

执行完成之后在 SonarQube 对应项目的界面上就能看到,有了不同分支的切换

但是事情可能并不会那么顺利,在两次安装这个插件完成后再去使用不同分支扫描我都碰到了同一个问题:Current edition does not support branch feature

4.2 Current edition does not support branch feature 问题的解决

这个问题的解决办法在 github 也已经有了对应的 issues 可以参考:https://github.com/mc1arke/sonarqube-community-branch-plugin/issues/663

他的做法是重新起一个 sonar 的容器,并且更新环境变量。但是并不是很想新起新的容器,感觉比较麻烦,所以我的做法是进入容器内部,直接修改配置文件,然后重启 sonar。

事实证明这个方法是可行的,

进入容器

docker exec -it sonarqube /bin/bash

找到了 /conf 目录下的 sonar.properties 文件,然后进行了修改

修改配置如下:

sonar.web.javaAdditionalOpts=-javaagent:./extensions/plugins/sonarqube-community-branch-plugin-1.12.0.jar=web
sonar.ce.javaAdditionalOpts=-javaagent:./extensions/plugins/sonarqube-community-branch-plugin-1.12.0.jar=ce

在修改的时候发生了一些意外,导致容器启动失败,可以通过如下命令复制文件进容器

docker cp sonar.properties sonarqube:/opt/sonarqube/conf/sonar.properties

通过如下命令从容器复制文件出来

docker cp sonarqube:/opt/sonarqube/conf ./

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...