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重启即可。

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

重启加载正确后,即可在页面看到“C++ (Community)”

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

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++代码扫描》

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

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

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

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

激活更多规则

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

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

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

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

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

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

配置scm

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

配置cppcheck扫描

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

配置扫描报告传到sonar平台,并保存配置。

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

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

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

执行构建

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

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

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

远端Sonar平台报告

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

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

总结

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

    原文作者:荒原_狼
    原文地址: https://www.jianshu.com/p/a0ee5f0678bc
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞