sonar是个平台,可以集成checkstyle,findbugs等插件。
安装sonar
sonar8以上的版本不支持mysql,先安装postgres数据库。
安装postgres:
docker run --name postgresql -e POSTGRES_PASSWORD=sonar -e POSTGRES_USER=sonar -p 5432:5432 -d postgres;
进入容器 docker exec -it d693341f910a /bin/bash
进入数据库 psql -U sonar
创建名为sonar的数据库 create database sonar
安装sonar:启动sonar 指定数据库配置(自动创建表),挂载了一个文件夹(用来下载插件)
docker run --name sonarqube -d -p 9000:9000 -e SONARQUBE_JDBC_USERNAME=sonar -e SONARQUBE_JDBC_PASSWORD=sonar -e SONARQUBE_JDBC_URL=jdbc:postgresql://192.168.1.197:5432/sonar -v /data/sonarqube/extensions/plugins:/opt/sonarqube/extensions/plugins sonarqube:8.7.0-community
访问9000端口,默认账号密码 admin/admin,自己可以设置账号
安插件
在应用市场找插件,chinese pack汉化包,checkstyle
在docker日志看安装过程,如果下载太慢,自己去github下载插件jar,放在宿主机 挂载的目录下/data/sonarqube/extensions/plugins,重启容器即可。
checkstyle Releases · checkstyle/sonar-checkstyle · GitHub
本地代码连接sonar服务端
只限于本地检查代码。
maven 配置文件,加sonar的连接信息
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<sonar.host.url>
http://192.168.1.197:9000
</sonar.host.url>
<sonar.login>admin</sonar.login>
<sonar.password>123456</sonar.password>
<sonar.inclusions>**/*.java,**/*.xml</sonar.inclusions>
</properties>
</profile>
项目pom加个插件
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.4.0.905</version>
</plugin>
本地命令,就会分析代码并上传到sonar server
mvn sonar:sonar
自定义检查规则
sonar自带了一些规则,针对不同语言的。
想用checkstyle的规则,给java创建质量配置
选择一些规则自己激活
仓库有checkstyle分类,可以自己选。不管哪个仓库,激活了就属于这个质量配置,如果新建了sonar项目可以针对这个项目设置用什么规则。
jenkins 安装
docker run -p 8080:8080 -p 50000:50000 jenkins/jenkins:lts-jdk11
访问8080,按推荐设置安装插件。
插件管理找maven、sonar插件
点安装完重启
jeknins打包需要jdk,maven,要在jenkins服务器安装这些,并进行配置
我用的容器,懒得安装了,直接选了自动安装,构建时会自动安装jdk maven。如果是配置的话,不选自动安装,输入jdk maven的目录
新建任务,如果没有maven选项,是maven插件没装
git仓库地址,要选择凭证,可以用私钥,选privatekey选项,把git私钥内容复制进去
这写maven命令
jenkins设置maven setting
如果用自定义maven 配置文件
管理文件
新建maven seting
全局配置 可以改maven仓库, 默认值:如果setting有设置就用,没有就./m2
全局工具配置,修改默认setting
流水线的maven配置也得改
jenkins设置sonar
全局设置sonar server的连接信息参考jenkins+sonar 持续集成检测代码质量 - 三只松鼠 - 博客园 。
生成sonar 令牌
获得sonar server的令牌后,在jenkins 的凭据设置中 设置sonar的令牌
全局设置sonar server的连接信息和使用的令牌:
另一个是在post step加执行 sonar,流水线可以配置构建前后要做的事,这里在构建后post 执行sonar,要写上sonar配置,也可以不写但要有专门的sonar配置文件放在指定地方,基本上控制台报错都会提示该怎么做
sonar.projectKey=melo
sonar.projectName=melo
sonar.java.source=/var/jenkins_home/workspace/test-melo/src
sonar.java.binaries=/var/jenkins_home/workspace/test-melo/src/main/webapp/WEB-INF/classes
如果报错 org.sonar.squidbridge.api.AnalysisException: Please provide compiled classes of your project with sonar.java.binaries property
提示java文件找不到class文件,要设置sonar.java.binaries构建得到的class文件夹设置上了。