SonarQube+Jenkins实现C++代码扫描

背景

最近接收到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)”

SonarQube+Jenkins实现C++代码扫描_第1张图片

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中。

SonarQube+Jenkins实现C++代码扫描_第2张图片

此时,在cmd命令界面输入"cppcheck"会出现如下提示,表示配置成功。

SonarQube+Jenkins实现C++代码扫描_第3张图片

step4:修改质量配置
sonar平台质量配置,新增C++的质量配置项

SonarQube+Jenkins实现C++代码扫描_第4张图片

激活更多规则

SonarQube+Jenkins实现C++代码扫描_第5张图片

SonarQube+Jenkins实现C++代码扫描_第6张图片

SonarQube+Jenkins实现C++代码扫描_第7张图片

激活完成后,将该规则项设置为默认。

step5:新建job
配置一个自由风格的构建任务

SonarQube+Jenkins实现C++代码扫描_第8张图片

配置scm
SonarQube+Jenkins实现C++代码扫描_第9张图片

配置cppcheck扫描
SonarQube+Jenkins实现C++代码扫描_第10张图片

配置扫描报告传到sonar平台,并保存配置。
SonarQube+Jenkins实现C++代码扫描_第11张图片

sonar平台配置C++扫描报告获取路径


SonarQube+Jenkins实现C++代码扫描_第12张图片

执行构建


SonarQube+Jenkins实现C++代码扫描_第13张图片

step7:查看扫描结果
Jenkins构建结果

SonarQube+Jenkins实现C++代码扫描_第14张图片

远端Sonar平台报告


SonarQube+Jenkins实现C++代码扫描_第15张图片

扫描执行完成,并成功展示报告。

总结

调研初期,配置多个工程扫描结果都没有bug,而且特意更换带有bug的源代码文件,扫描结果还是正常。一度纠结问题到底出在哪?后来仔细阅读sonar-cxx插件官方安装文件,才恍然大悟,是漏了安装扫描工具(cppcheck)步骤,这也再次警告自己,对不熟的工具,要耐下心,仔细阅读说明,这样能少走弯路。

你可能感兴趣的:(SonarQube+Jenkins实现C++代码扫描)