0、背景说明
初次认识Sonar是因为当前团队负责研发过程管理追踪,总部对Sonar扫描发现重大缺陷有指标要求,然后带着好奇去了解了一下,Sonar是什么?Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量。再一看,支持的语言真多,其中就有我曾经最喜欢的Ruby,抱着一个曾经的技术人的好奇精神,我手痒了。
1、下载SonarQube
访问https://www.sonarqube.org/下载,自己实验用,免费的Community版本就行了,下载了8.2.0.32929版本。
下载完成后双击原地解压。
cd ~/Downloads/sonarqube-8.2.0.32929/bin/macosx-universal-64
./sonar.sh start
成功后,浏览器打开localhost:9000
发现没成功
./sonar.sh console
仔细阅读报错信息,java版本太低,当前版本10,要求11以上
2、升级java
brew upgrade java
一阵等待后,升级完成,按最后的提示将环境变量配好
java --version
发现java已升级到当前最新版13.0.2
3、浏览器操作
重启sonar
./sonar.sh start
浏览器打开localhost:9000,成功 登陆,默认账号密码都是admin 新建project,按提示操作
4、下载Scanner
按提示,Mac版Scanner下载
下载完后解压打开 ~/.bashrc 新增一行
export PATH="$PATH:/XXXXXX/sonar-scanner-4.2.0.1873-macosx/bin"
source ~/.bashrc
5、开始扫描
cd到一个Rails项目的文件夹,然后把浏览器那块代码贴到console里执行就好了
sonar-scanner \
-Dsonar.projectKey=TT \
-Dsonar.sources=. \
-Dsonar.host.url=http://localhost:9000 \
-Dsonar.login=f8e6baf416d30f0132a19719961d6d55656a7057
静静地等待执行完成
6、报错处理
发现报错,忘记截图了,大致效果就是可以看到error个数,但是无法追踪定位error和查看原因。 解决办法:关闭sonorqube
cd ~/Downloads/sonarqube-8.2.0.32929/bin/macosx-universal-64
./sonar.sh stop
删除~/Downloads/sonarqube-8.2.0.32929/data/es6下的所有文件夹,胆小不敢直接rm -rf,手动进文件夹看了看是什么备份了才删 然后
./sonar.sh start
7、浏览器看结果
浏览器打开http://localhost:9000 不看不知道,一看吓一跳,随便找了几个老项目,一堆的bug,而且暴露了我不写unit_test并且大量复制粘贴代码的坏毛病,点看bug看详情,也有很多bad_practice以及非常低级的错误。
8、进一步探索
尝试了一下可以手动配置扫描规则,比如有些规则太严格了,可以手动配置去掉,浏览器端就可以操作。
对于发现的问题,可以修改处理后重新扫描,看到数字蹭蹭往下掉,还有曲线图,很适合技术宅。
综上,作为一个不再写代码的人,我对这个工具还是很有好感的,试了一下,好像不支持Objective—C。
网上搜了下,有个叫fortify的工具可以支持,下载中,实践后分享。