目录
#SonarQube开源的代码分析平台,下载地址Download | SonarQube | Sonar (sonarsource.com)
#目前它最新的长期支持版本是9.9.5
1.sonarqube安装
#首先拉取依赖的数据库镜像、sonarqube镜像
docker pull postgres
docker pull sonarqube:9.9.5-community
#编写yml进行部署
[root@k8smaster docker]# pwd
/usr/local/docker
[root@k8smaster docker]# ls
jenkins_docker
[root@k8smaster docker]# mkdir sonarqube_docker
[root@k8smaster docker]# cd sonarqube_docker/
[root@k8smaster sonarqube_docker]# vim 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: sonarqube:9.9.5-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
[root@k8smaster sonarqube_docker]# docker compose up -d
#启动正常会失败,因为最大虚拟内存太低。
#更改重启即可
[root@k8smaster sonarqube_docker]$echo "vm.max_map_count=262144" >> /etc/sysctl.conf && sysctl -p
vm.max_map_count = 262144
[root@k8smaster sonarqube_docker]$docker compose up -d
#访问ip:9000
#默认用户名密码都是admin,这里我改了123
2.sonarqube插件安装
#中文插件(需要重启)
3.使用maven进行代码测试
#这里要先在windows配置maven,并在IDEA上声明。
#可以参考这个博主的文章来配置maven
Maven安装和配置详细教程(Windows)_maven windows-CSDN博客
#settings.xml文件修改,记得把前面改过的仓库和java版本也改上
D:\download\apache-maven-3.9.6\conf\settings.xml
<!--加上下面的内容(指定sonar的默认开启。登录地址,用户名和密码)-->
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<sonar.login>admin</sonar.login>
<sonar.password>123</sonar.password>
<sonar.host.url>http://192.168.64.20:9000</sonar.host.url>
</properties>
</profile>
#Allthis done我们就可以通过IDEA里面终端通过命令对当前代码进行质量检测了。
#如果出现这样的报错,更新windows的java版本至java9以上。
#再次回到sonarqube首页,创建一个手工项目,即可发现检测代码的质量。
#异味只是代码不规范的地方,不影响代码功能使用的极小问题而已
4.使用sonar-scanner进行代码测试
#sonar-scanner是sonarqube提供的测试方式,后期jenkins整合sonarqube的时候就需要使用到它
4.1 sonar-scanner下载
4.2 解压
[root@k8smaster docker]# pwd
/usr/local/docker
[root@k8smaster docker]# unzip sonar-scanner-cli-4.6.1.2450-linux.zip
[root@k8smaster docker]# mv sonar-scanner-4.6.1.2450-linux/ sonar-scanner
#因为是要给jenkins进行调用的,所以直接把解压好的文件放到映射好的jenkins数据卷中就可以了
[root@k8smaster docker]# mv sonar-scanner/ jenkins_docker/data/
4.3 sonar-scanner配置
[root@k8smaster docker]# cd jenkins_docker/data/sonar-scanner/conf
#改成sonarqube所在地址
#后面我们调用sonarqube提供的token,来通过sonar-scanner使用sonarqube。
5. 在本地进行代码测试
[root@k8smaster conf]# cd ../bin/
[root@k8smaster bin]# pwd
/usr/local/docker/jenkins_docker/data/sonar-scanner/bin
#进入jenkins打包好的代码目录
[root@k8smaster bin]# cd /usr/local/docker/jenkins_docker/data/workspace/test2/
[root@k8smaster test2]#
[root@k8smaster test2]# ls
docker mvnw mvnw.cmd pom.xml src target
#开始进行测试。#sonar.sources项目位置,sonar.projectname项目名称,sonar.projectKey项目标识,sonar.java.binaries项目编译后的位置
[root@k8smaster test2]# /usr/local/docker/jenkins_docker/data/sonar-scanner/bin/sonar-scanner -Dsonar.sources=./ -Dsonar.projectname=linux-test -Dsonar.java.binaries=./target/ -Dsonar.projectKey=linux-test -Dsonar.login=sqa_a7c4677e09792005ff62cae13f6fab1ea9f169e5
#会报错,因为我们还需要指定用户名和密码,这里使用指定token的方式。
#(在sonarqube网页进行生成token)
#检测成功后,返回sonar首页即可看到检测的项目。
6.SonarQube整合到jenkins内部
#目的十分简单,在jenkins通过maven把包打包构建好后,要经过sonarqube进行代码质量检测。
6.1 下载插件
#SonarQube Scanner
#下载失败可以手动安装,先到jenkins容器内部的plugins目录把相关失败的插件删除后,再手动upload。
6.2 配置sonarqube信息
#先应用保存,再添加token。不然添加不上
#忘记了再次生成即可
##
#至此jenkins已经可以连接到sonarqube了。
6.3 经由Jenkins的代码测试具体实现
#想要实现代码检测,需要在任务中追加配置。
#在构建代码成功步骤后,执行sonar本地代码测试的命令
#想要jenkins执行sonar的命令,就要告诉jenkins全局说sonar在哪。
#构建步骤添加Execute SonarQube Scanner
#JOB_NAME就是引用的Jenkins任务的名称。这里是test2
sonar.projectname=${JOB_NAME}
sonar.projectKey=${JOB_NAME}
sonar.sources=./
sonar.java.binaries=./target
#这样就ok了
6.4 构建任务并测试是否经过代码测试步骤
#构建会出现错误,其实很简单。因为我们之前的手动测试产生了隐藏文件.scannerwork,而sonar没有权限,我们需要手动进行删除。
[root@k8smaster data]# ls -a workspace/test2/
. .. docker .git .gitignore .mvn mvnw mvnw.cmd pom.xml .scannerwork src target
[root@k8smaster data]# rm -fr workspace/test2/.scannerwork/
#删除之后再重新构建即可