安装
参考文档 https://docs.sonarqube.org/latest/setup/get-started-2-minutes/
sonar 由两部分组成:sonarqube 和 sonar-scanner-cli。前者是 web 端,后者是 CLI 端。下载地址如下:
- https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.9.1.zip
- https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.0.0.1744-linux.zip
另外,运行 sonar 需要 jvm 环境,自行安装。ubuntu 可执行 apt install openjdk-11-jdk
运行 web 端
启动服务
解压 sonarqube-7.9.1.zip 后,进入 sonarqube-7.9.1 目录,执行下述指令启动,之后访问 http://localhost:9000
1 | ./bin/linux-x86-64/sonar.sh console |
另外,如果需要修改配置,修改 conf/sonar.properties
文件即可,其中 92 行附近可以修改运行内存
1 | sonar.web.javaOpts=-Xmx5000m -Xms5000m -XX:+HeapDumpOnOutOfMemoryError |
登录系统
- 用户名 admin
- 密码 admin
创建项目
点击右上角加号,创建项目,输入项目名称、token 信息后,会显示一个指令,用户
进行代码扫描
之前我们安装了 sonar-scanner-cli-4.0.0.1744-linux.zip
,解压后,增加 bin
到环境变量
1 | export PATH=$PATH:/home/rovast/Software/sonar-scanner-4.0.0.1744-linux/bin |
然后使其生效 source ~/.bashrc
或者 source ~/.zshrc
根据上一步的提示,进入到需要扫描的项目录,执行
1 | sonar-scanner \ |
等待运行结束后,web 端会自动加载对应报告进行分析
查看分析报告
自定义检测规则
参考 https://docs.sonarqube.org/latest/analysis/languages/php/
总结
总结起来,sonar 的特点就是功能强大。
- 支持的语言丰富,主流的开发语言基本都支持了
- web 界面友好,可以很清晰地查看报告和分析
- 分析的指标丰富:安全性、技术负债、覆盖度、主流规则等等
- marketplace
除了上述有点外,sonar 也有一些其他方面待考量的地方
- sonar 是基于 java 开发,如果需要拓展其中的规则,需要了解 java 体系
- sonar 本身是一个成熟的产品,如果基于这个来自定义工作流,难度较大
- sonar 资源占用较大
所以如果需要一套成熟的代码检测相关工具,sonar 是个不错的选择。
sonar 和 phpCodeSinffer 对比
最大的区别
- sonar 是一个产品提供了完善的解决方案
- phpCodeSniffer 是一个工具,专注于 php 语法检查
拓展性
- sonar 是成套的解决方案,可定制化程序较低。需要在 sonar 现有的 rules 中组合自己的 rule,或者在 marketPlace 中找到合适的组件。
- 如果需要开发完全自定义的规则,可参考 https://docs.sonarqube.org/latest/analysis/languages/php/ ,使用 java 开发对应的规则
如果基于 sonar 来构建自己的工作流,可行性较低。因为他本身是个产品,所有功能都集成了,有自己的一套思想
phpCodeSniffer 是基于 PHP 的一套语法检测工具
- phpCodeSniffer 预留了语法检查的接口和类。如果需要自定义规则,实现对应的接口或类即可,较为简单
- 如果基于 phpCS 来构建自己工作流,较为现实。毕竟它只是个工具
- 另外,phpCS 有基于 IDE 的一些插件,可以集成到编辑器中实时检查
总结
- 如果只是做语法检查,并且希望高度自定义,推荐使用 phpCodeSniffer
- 如果对定制化程度没有要求,希望有个工具开箱即用,并且也无后续定制需求,可使用 sonar
- 【推荐】使用 phpCS,这样便于后期和也无框架高度集成,便于做更多贴合框架和业务的检测。比如业务级别调用规范等