背景
自己做项目管理时候是不是有个困扰,明明自己已经做了代码规范,产出了文档,还有这么多开发人员没有按照规范执行?项目代码写法五花八门太难维护了?是不是面试时候有面试官问,项目管理时候代码质量怎么得到保证的?如何指定规范并让开发强制执行?如果有开发没按规范编写代码有什么办法第一时间知道?
如果只是最简单的规范,用阿里的插件检查一下就可以了,但公司会有自己的规范不在阿里的插件中,如果当你回答代码走查来控制代码质量,那你就已经步入面试官的陷阱中了,代码走查可能会出现没走查到的代码提交到git上了,而且代码走查团队人数少的时候还有精力走查,当团队大了,像几百人的技术团队,代码走查的内容简直就是冰山一角了,完全没办法控制代码质量。
不是有句话说的好“人为参与的越多,失误率越高”,所有的事尽量交给自动化的技术来实现,代码质量审查也不例外,sonar就是为代码质量审查而生的。废话不多说,说一千道一万都不如直接上手操作一下来的实在。
环境准备
sonar搭建
首先准备docker-compose脚本
version: "2"
services:
sonarqube:
image: sonarqube
container_name: sonarqube
ports:
- "9000:9000"
environment:
SONARQUBE_JDBC_URL: jdbc:mysql://192.168.2.49:3306/sonar?useUnicode=true&rewriteBatchedStatements=true&useConfigs=maxPerformance&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&allowMultiQueries=true&allowPublicKeyRetrieval=true
SONARQUBE_JDBC_USERNAME: root
SONARQUBE_JDBC_PASSWORD: 123456
volumes:
- /home/sonar/data:/sonarqube/data
- /home/sonar/extensions:/sonarqube/extensions
- /home/sonar/logs:/sonarqube/logs
- /home/sonar/temp:/sonarqube/temp
上面的compose是我在测试环境搭建使用的脚步,需要根据自己服务器实际情况进行修改。
然后执行这compose,命令如下:
docker-compose -f sonar-compose.yaml
执行后,查看启动信息,确认无误后,访问地址:
http://192.168.2.49:9000/
账号:admin
密码:admin
第一次登陆会强制要求修改密码
修改后,需要进行汉化处理,如下图所示:
先选择Administration,选中marketplace,然后看到pulgins该组,搜索Chinese Pack,然后点击install,安装完成后上面会有提示重启服务,点击重启,再进入就汉化web界面了。
配置关联
gitlab获取token
访问gitLab,在用户设置中,找到访问令牌,然后点击创建令牌,范围全选,去一个名字,然后这名字对应的项目都需要开通开发权限,点击保存,就能获取到个人访问令牌,后续关联sonar有用
sonar配置gitlab关联
下载sonar-gitlab-plugin-4.1.0-SNAPSHOT.jar
执行下面命令:
docker cp sonar-gitlab-plugin-4.1.0-SNAPSHOT.jar 《容器id》:/opt/sonarqube/extensions/plugins/
重启sonarqube,登陆进入后,在配置中找到gitlab,配置配置gitlab地址和token,如下图所示:
drone添加sonar流水线验证
项目中在.drone.yaml中,build中添加这命令
- mvn install sonar:sonar -Dsonar.host.url=http://192.168.2.49:9000 -Dsonar.login=150e1669f7927f3a9b50cdece22510484f6dad82 -
Dsonar.java.binaries=target/sonar
在sonar界面中,添加项目
在sonar界面生成的url,login回填到drone.yaml中。
服务端的配置就结束了,默认使用的是阿里的代码规范,sonnar提供了自定义验证规则,自己可以尝试来配置规则(后续再补充规则编写相关文档)。
目前这种方式是sonar控制台提示(如果可以做到流水线中断方式,让代码无法提交到git上)
idea插件安装
添加插件sonarlint,File—>Settings—>Plugins,进入插件界面,搜索sonarlint
然后安装
安装完成后重启项目,之后就可以本地进行效验了,对着项目或对着java类右键就可以进行验证。