目录
说明
这里使用Jenkins服务器部署Sonar Qube来检测代码,如果电脑内存允许,也可以单独加一台服务器部署Sonar Qube。
七、集成Sonar Qube
7.1 Sonar Qube介绍
Sonar Qube是一个开源的代码分析平台,支持Java、Python、PHP、JavaScript、CSS等25种以上的语言,可以检测出重复代码、代码漏洞、代码规范和安全性漏洞的问题。
Sonar Qube可以与多种软件整合进行代码扫描,比如Maven,Gradle,Git,Jenkins等,并且会将代码检测结果推送回Sonar Qube并且在系统提供的UI界面上显示出来。
下图为Sonar Qube的UI界面
7.2 Sonar Qube环境搭建
7.2.1 Sonar Qube安装——docker安装
Sonar Qube在cent os 7.9版本中已经放弃了对MySQL的支持,并且建议在商业环境中采用PostgreSQL,那么安装Sonar Qube时需要依赖PostgreSQL。
并且这里会安装Sonar Qube的长期支持版本8.9
- 拉取镜像
docker pull postgres
docker pull sonarqube:8.9.6-community
- 编写docker-compoe.yml
# 创建目录sonarqube_docker,在此目录下编辑yml文件
cd /usr/local/docker
mkdir sonarqube_docker
cd sonarqube_docker
ls
vim docker-compose.yml
下面内容粘贴进去:
version: "3.1"
services:
db:
image: postgres
container_name: db
ports:
- 5432:5432 # 默认端口5432
networks:
- sonarnet
environment:
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
sonarqube:
image: sonarqube:8.9.6-community
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
- 配置最大内存
# 设置最大内存
vim /etc/sysctl.conf
# 加入以下内容
vm.max_map_count=262144
# 重新加载
sysctl -p
- 启动容器
cd /usr/local/docker/sonarqube_docker
docker-compose up -d
需要一定时间启动,可以可以查看容器日志,看到如下内容代表启动成功
7.2.2 访问sonarqube
访问Sonar Qube首页——用IP+端口号,这里是192.168.2.211:9000。默认用户名和密码都为admin
还需要重新设置一次密码
进入Sonar Qube首页
7.2.3 安装中文插件
安装成功后需要重启,安装失败重新点击install重装即可。
安装成功后,会查看到重启按钮,点击即可
重启后查看效果
7.3 Sonar Qube基本使用
Sonar Qube的使用方式很多,Maven可以整合,也可以采用sonar-scanner的方式,再查看Sonar Qube的检测效果
7.3.1 Sonar-scanner实现代码检测
-
下载Sonar-scanner压缩包:https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/
下载4.6.x版本即可,要求Linux版本 -
解压并配置sonar服务端信息
① 由于是zip压缩包,需要安装unzip解压插件
yum -y install unzip
②解压压缩包
unzip sonar-scanner-cli/sonar-scanner-cli-4.6.0.2311-linux.zip
③改名并移动/usr/local/docker/jenkins_docker/data/
下
cd
mv sonar-scanner-4.6.1.2450-linux/ sonar-scanner
mv sonar-scanner /usr/local/docker/jenkins_docker/data/
④配置SonarQube服务端地址,修改conf
下的sonar-scanner.properties
文件
cd /usr/local/docker/jenkins_docker/data/sonar-scanner/conf
vim sonar-scanner.properties
- 执行命令检测代码
# 在项目所在目录执行以下命令,我这里在/usr/local/docker/jenkins_docker/data/workspace/mytest下执行
/usr/local/docker/jenkins_docker/data/sonar-scanner/bin/sonar-scanner -Dsonar.sources=./ -Dsonar.projectname=linux-test -Dsonar.login=23f05c92e77dfeb4da952f461286d5f06ef34383 -Dsonar.projectKey=linux-test -Dsonar.java.binaries=./target/
解释:
/usr/local/docker/jenkins_docker/data/sonar-scanner/bin/sonar-scanner :sonar-scanner命令所在目录
-Dsonar.sources=./ :检测的文件所在目录
-Dsonar.projectname=linux-test :给检测项目命名
-Dsonar.login=23f05c92e77dfeb4da952f461286d5f06ef34383 :sonarqube网页上生成令牌
-Dsonar.projectKey=linux-test :指定项目标识(key)
-Dsonar.java.binaries=./target/ :设置编译过后的内容在哪
- 查看SonarQube界面检测结果
7.4 Jenkins集成Sonar Qube
Jenkins继承Sonar Qube实现代码扫描需要先下载整合插件
7.4.1 Jenkins中安装sonarqube插件
在Jenkins中下载SonarQube Scanner插件
7.4.2 Jenkins系统配置Sonar Qube
-
先在sonarqube上开启Sonar Qube权限验证,一般默认是开启的
-
获取Sonar Qube的令牌
-
在Jenkins上配置Sonar Qube信息
【系统管理】——【系统配置】
找到SonarQube servers
密码可能添加不了,没关系,先应用保存,然后再回来添加
选择刚才加好的信息,应用保存
7.4.3 全局配置Sonar-scanner
-
将Sonar-scaner添加到Jenkins数据卷中并配置全局配置
-
mytest任务里构建操作配置sonar-scanner
编辑参数
sonar.projectname=${JOB_NAME}
sonar.projectKey=${JOB_NAME}
sonar.source=./
sonar.java.binaries=target
7.4.4 构建任务
点击立即构建,如果报错,检查/usr/local/docker/jenkins_docker/data/workspace/mytest
下是否有隐藏文件“.scannerwork
”,有的话就删掉,再次构建。