Sonar Qube介绍和安装(三)
Sonar Qube介绍
Sonar Qube是一个开源的代码分析平台,支持Java、Python、PHP、JavaScript、CSS等25种以上的语言,可以检测出重复代码、代码漏洞、代码规范和安全性漏洞的问题。
Sonar Qube可以与多种软件整合进行代码扫描,比如Maven,Gradle,Git,Jenkins等,并且会将代码检测结果推送回Sonar Qube并且在系统提供的UI界面上显示出来
Sonar Qube环境搭建
Sonar Qube安装
Sonar Qube在7.9版本中已经放弃了对MySQL的支持,并且建议在商业环境中采用PostgreSQL,那么安装Sonar Qube时需要依赖PostgreSQL。
并且这里会安装Sonar Qube的长期支持版本8.9
- 拉取镜像
docker pull postgres
docker pull sonarqube:8.9.3-community
- 编写docker-compoe.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: sonarqube:8.9.3-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
- 启动容器
docker-compose up -d
- 浏览器访问9000端口,发现容器启动失败,查看docker日志
docker logs -f sonarqube
- 设置sysctl.conf文件信息
vi /etc/sysctl.conf
设置完成后执行: sysctl -p
sysctl -p
- 重启容器: docker-compose up -d,访问9000端口登录SonarQube
SonarQube 默认密码和账号均为: admin
安装中文插件
Sonar Qube的基本使用
Sonar Qube的使用方式很多,Maven可以整合,也可以采用sonar-scanner的方式,再查看Sonar Qube的检测效果
Maven实现代码检测
- 修改Maven的settings.xml文件配置Sonar Qube信息
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<sonar.login>admin</sonar.login>
<sonar.password>123456789</sonar.password>
<sonar.host.url>http://192.168.43.141:9000</sonar.host.url>
</properties>
</profile>
- 在代码位置执行命令:mvn sonar:sonar
这里执行可能会报错:
java.lang.TypeNotPresentException: Type org.sonarsource.scanner.maven.SonarQubeMojo not present
Caused by: java.lang.UnsupportedClassVersionError: org/sonarsource/scanner/maven/SonarQubeMojo : Unsupported major.minor version 52.0
只需要在pom.xml文件加上
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.7.0.1746</version>
</plugin>
- 查看Sonar Qube界面检测结果
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-4.6.0.2311-linux.zip
-
将 sonar-scanner 移动到 Jenkins 容器数据卷中
cd /usr/local/docker/jenkins_docker/data mv /sonar-scanner ./
-
配置sonarQube服务端地址,修改conf下的sonar-scanner.properties
-
在项目所在目录执行以下命令
Ps:主要查看我的sonar-scanner执行命令的位置
/usr/local/docker/jenkins_docker/data/sonar-scanner/bin/sonar-scanner -Dsonar.sources=./ -Dsonar.projectname=linux-test -Dsonar.projectKey=linux-test -Dsonar.java.binaries=target/ -Dsonar.login=718e3d1d21ae6a55ddea5e0979d5eb762d9d51fc
-
查看结果
-
Jenkins集成Sonar Qube
Jenkins继承Sonar Qube实现代码扫描需要先下载整合插件
Jenkins安装插件
- 安装SonarQube Scanner插件
- Jenkins配置Sonar Qube
- 配置Sonar-scanner
将Sonar-scaner添加到Jenkins数据卷中并配置全局配置
配置任务的Sonar-scanner
构建任务
- 构建任务报错
- 删除工作目录下 mytest 项目,再次重新构建
由于之前测试生成了 .scannerwork 文件,也可以只删除 .scannerwork 文件
- 成功构建