背景
最近接收到C++工程扫描的需求,一开始以为类似java般简单,下载插件直接扫描就可以出结果,调研过后发现并不是如此,现将自己调研结果记录于此。
工具准备
- SonarQube工具:展示扫描报告
版本6.7以上 - jenkins工具:集成Cppcheck扫描工具与SonarQube平台
- Cppcheck工具:Cppcheck是一种C/C++代码缺陷静态检查工具,不同于C/C++编译器及其它分析工具,Cppcheck只检查编译器检查不出来的bug,不检查语法错误。
实现步骤
step1:SonarQube安装C++扫描插件
调研时遇到的第一个问题就是关于C++插件的,SonarQube的默认C/C++插件CFamily是收费的,差点就放弃,不过幸好搜索到替代方案,sonar-cxx插件,听闻插件作者就是看不惯CFamily的收费,自己写了个开源的, 更牛逼的插件。
下面是安装过程, 把jar文件下载下来,下载地址https://github.com/SonarOpenCommunity/sonar-cxx/releases, 然后放到你的sonarqube目录/extensions/plugins目录下,再将sonarqube重启即可。
重启加载正确后,即可在页面看到“C++ (Community)”
step2:下载Cppcheck工具
为什么需要Cppcheck工具,这个在sonar-cxx插件的安装文档中有说明。说明请戳这里。
The C++ Community Plugin does not run any static analysis tools itself, make sure that the reports are generated before the analysis。
大意是说:C++ Community插件本身不会运行任何静态分析工具,所以需确保在分析之前生成报告。
查看官方文档Code checkers,也说明了可以使用那些C++的扫描工具。笔者这里选择的是Cppcheck工具。
下载地址:cppcheck
step3:安装Cppcheck
将下载好的Cppcheck安装在Jenkins服务器,或者Jenkins奴隶节点上。笔者Jenkins安装在本地Windows环境,下载的工具也安装在本地,按提示“下一步”安装即可,这里不累述。
安装成功后,配置一下环境变量。将cppcheck.exe所在的路径配置到高级系统设置>环境变量>系统变量的Path中。
此时,在cmd命令界面输入"cppcheck"会出现如下提示,表示配置成功。
step4:修改质量配置
sonar平台质量配置,新增C++的质量配置项
激活更多规则
激活完成后,将该规则项设置为默认。
step5:新建job
配置一个自由风格的构建任务
配置scm
配置cppcheck扫描
配置扫描报告传到sonar平台,并保存配置。
sonar平台配置C++扫描报告获取路径
执行构建
step7:查看扫描结果
Jenkins构建结果
远端Sonar平台报告
扫描执行完成,并成功展示报告。
总结
调研初期,配置多个工程扫描结果都没有bug,而且特意更换带有bug的源代码文件,扫描结果还是正常。一度纠结问题到底出在哪?后来仔细阅读sonar-cxx插件官方安装文件,才恍然大悟,是漏了安装扫描工具(cppcheck)步骤,这也再次警告自己,对不熟的工具,要耐下心,仔细阅读说明,这样能少走弯路。