目录
- 一、简介
- 二、Sonar环境搭建
- 2.1 下载Docker镜像
- 2.2 使用docker-compose部署
- 三、Sonar Qube基本使用
- 3.1 Maven实现代码检测
- 3.2 Sonar-scanner实现代码检测
- 四、Jenkins集成Sonar Qube
- 4.1 下载插件
- 4.2 SonarQube生成Token
- 4.3 Jenkins配置Sonar Token信息
- 4.4 Jenkins全局工具配置Sonar
- 4.5 Jenkins任务配置构建命令
- 4.6 立即构建
- 五、Jenkins集成Maven Sonar
- 5.1 配置JDK环境
- 5.2 Maven配置Sonar信息
- 5.3 修改Jenkins的构建命令
- 5.4 立即执行
一、简介
上次我们学习了将本地代码上传到Git仓库,Jenkins再拉去Git仓库代码,通过Maven进行构建打包,并发布到服务器,以Docker容器方式启动。这次我们继续学习DevOps,代码检测工具Sonar Qube。
Sonar Qube是一个开源的代码分析平台,支持Java、Python、PHP、JavaScript、CSS等25种以上的语言, 可以检测出重复代码、代码漏洞、代码规范和安全性漏洞的问题。
Sonar Qube可以与多种软件整合进行代码扫描,比如Maven,Gradle,Git,Jenkins等,并且会将代码检测结果推送回Sonar Qube并且在系统提供的UI界面上显示出来。
二、Sonar环境搭建
2.1 下载Docker镜像
docker pull postgres
docker pull koolwithk/sonarqube-arm # arm64架构,MacOS M1芯片就是arm64架构
docker pull sonarqube:latest # amd64架构,即x86
注意sonar docker 镜像:
https://hub.docker.com/r/koolwithk/sonarqube-arm
https://hub.docker.com/_/sonarqube


2.2 使用docker-compose部署
准备docker-compose.yml文件:
version: "3.1"
services:
db:
image: postgres
container_name: db
ports:
- 5432:5432
networks:
- sonarnet
environment:
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
sonarqube:
image: koolwithk/sonarqube-arm
container_name: sonarqube
depends_on:
- db
ports:
- "9000:9000"
networks:
- sonarnet
environment:
SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
SONAR_JDBC_USERNAME: sonar
SONAR_JDBC_PASSWORD: sonar
networks:
sonarnet:
driver: bridge
docker-compose up -d # 启动管理的容器
docker-compose logs -f # 查看日志
docker-compose down #关闭并删除容器
docker-compose ps #查看由docker-compose管理的容器

注意:首次启动会有报错(忘记截图了)
解决办法:
使用vim /etc/sysctl.conf命令编辑sysctl.conf文件:vm.max_map_count=262144

浏览器访问IP+9000:
默认的用户名和密码都为admin

登录成功后重新修改密码:

登录成功后主界面:

可以选择安装中文插件


安装成功后,重启Sonar。(建议阅读英文,熟悉英文)
三、Sonar Qube基本使用
Sonar Qube的使用方式很多,Maven可以整合,也可以采用sonar-scanner的方式。
3.1 Maven实现代码检测
修改Maven的settings.xml文件配置Sonar Qube信息
<profiles>
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<sonar.login>admin</sonar.login>
<sonar.password>123456</sonar.password>
<sonar.host.url>http://192.168.153.131:9000</sonar.host.url>
</properties>
</profile>
</profiles>
执行mvn sonar:sonar 命令:进行检测代码:

查看 SonarQube 界面检测结果:

记录报错
错误1:Java8版本太低,使用Java11。

错误2:
代码编译未通过,原因是lombok版本太低,导致编译失败,升级lombok版本为1.18.24后编译通过。

3.2 Sonar-scanner实现代码检测
sonar-scanner-cli 下载地址:https://binaries.sonarsource.com/?prefix=Distribution/sonar-scanner-cli/


note:data为Jenkins挂载的宿主机目录,sonar-scanner为我解压后的目录。
解压压缩包后进入conf目录修改sonar-scanner配置文件:

../../sonar-scanner/bin/sonar-scanner -Dsonar.sources=./ -Dsonar.projectname=test -Dsonar.projectKey=java -Dsonar.java.binaries=target/
查看SonarQube界面检测结果.
由于博主是本机是Mac M1,OS 是arm64架构,无法执行x86架构的软件。所以无法实验使用Sonar-scanner方式。


四、Jenkins集成Sonar Qube
4.1 下载插件
Jenkins集成Sonar Qube实现代码扫描需要先下载整合插件。

4.2 SonarQube生成Token
Sonar开启权限验证:
Administration --》 Configuration --》Security

Sonar生成令牌:
进入个人账户 --》 Security --》 Generate Tokens


4.3 Jenkins配置Sonar Token信息
在Jenkins 的配置中,找到SonarQube servers ,点击添加

类型选择 Secret text,将刚刚生成的Sonar Token 粘贴到Secret中。

4.4 Jenkins全局工具配置Sonar
进入Jenkins --》 全局工具配置 --> SonarQube Scanner

4.5 Jenkins任务配置构建命令
进入Jenkins项目配置,在构建步骤,点击增加构建步骤

sonar.projectname=${JOB_NAME}
sonar.projectKey=${JOB_NAME}
sonar.source=./
sonar.java.binaries=target/

4.6 立即构建
点击立即构建,然后查看Sonar Qube的检测效果。
五、Jenkins集成Maven Sonar
由于博主机器配置问题,无法集成Sonar-scanner,所以只能使用maven方式得集成Sonar。
5.1 配置JDK环境
添加JDK11配置:
下载JDK11的压缩包,解压并移动到宿主机挂载的Jenkins的目录

设置项目使用的JDK为jdk11版本

5.2 Maven配置Sonar信息
修改Jenkins 的Maven的配置:
<profiles>
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<sonar.login>admin</sonar.login>
<sonar.password>123456</sonar.password>
<sonar.host.url>http://192.168.153.131:9000</sonar.host.url>
</properties>
</profile>
</profiles>
5.3 修改Jenkins的构建命令
更改Jenkins 任务Maven构建命令:
sonar:sonar
package

5.4 立即执行
点击立即执行,查看控制台日志


在Sonar页面查看结果:




可以看到Sonar检测我们代码的结果,可以看到我们的代码哪些Bug、
完成。
















![[附源码]Python计算机毕业设计Django作业查重系统](https://img-blog.csdnimg.cn/5c8d66a6da27483fb0905b531461a4f8.png)

