sonarqube+cppcheck windows平台配置

第一步:下载sonarqube

我所使用的版本是 sonarqube 8.9(社区版),搭配 sonar-scanner 5.0 + cppcheck + sonar-cxx-plugin-2.1.0.428.jar。

官网下载地址:Download Previous SonarQube Versions | Sonar (sonarsource.com)

注意:7.9版本及以上无法搭配jdk8使用

官网提供的下载版本,最低支持到7.9,即官网无法下载适配jdk8的版本,如需使用更低版本,需要在网上自行搜索

下载应用解压后,进入bin文件夹,可以看到:

在这里插入图片描述

从windows目录进入,找到StartSonar.bat并点击,一个cmd会弹出,显示如下:

在这里插入图片描述

这样代表成功开启sonar服务器
然后,登陆localhost:9000:

打开网页地址:http://localhost:9000(若配置本地服务器,则 localhost 要改为相应值,我配置 postgresql,使用 http:/127.0.0.1:9000 登入)
初始账号密码均为admin,按照系统要求重置密码后,进入界面显示如下: 

在这里插入图片描述

配置本地数据库(以 postgresql 为例)

1.2.创建sonar用户及sonar数据库
(1)创建用户——sonar
双击Login/Group Roles——>在General中输入Name:sonar——>在Definition中输入密码:123456——>在Privileges中勾选(可参考下图步骤)

在这里插入图片描述

在这里插入图片描述
(2)创建sonar数据库
双击Databases——>在General中输入Name:sonar

在这里插入图片描述

切换用户连接
右击PostgreSQL——Disconnect Server

在这里插入图片描述
右击PostgreSQL——Properties…

在这里插入图片描述

右击PostgreSQL——Connect Server,输入密码

在这里插入图片描述

在 sonarqube 的 conf 文件夹下,找到 sonar.properties文件。在其中,需要添加如下信息:

sonar.jdbc.url=jdbc:postgresql://localhost/sonar?currentSchema=public # sonar表示数据库名字
sonar.host.url=http://localhost:9000/sonarqube
sonar.jdbc.username=sonar #数据库用户名
sonar.jdbc.password=123456 # 密码
sonar.login=admin #登陆sonarqube的名字
sonar.password=admin #登陆sonarqube的密码

 如下图所示
在这里插入图片描述

第二步:下载scanner

在官网下载:SonarScanner (sonarsource.com)

(无适配要求,下载最新版即可)

打开控制面板,配置系统环境变量,在环境变量PATH里加上:(安装包保存路径)\sonar-scanner\bin

在cmd中输入sonar-scanner -v出现以下显示说明配置成功:

在这里插入图片描述

如何使用

  • 在项目根目录下新建文件sonar-project.properties,添加如下配置:
#sonarqube服务器地址
sonar.host.url=http://IP:9000 # 使用 postgresql,则修改为 http://127.0.0.1:9000
#sonarqube用户名
sonar.login=sonar
#sonarqube密码
sonar.password=sonar2019
#项目唯一标识(不能出现重复)
sonar.projectKey=testsonar
#项目名称
sonar.projectName=testsonar
#源代码目录
sonar.sources=src/main
#版本号
sonar.projectVersion=0.0.1-SNAPSHOT
#语言
sonar.language=c++
#源代码文件编码
sonar.sourceEncoding=UTF-8
  • 然后在项目根目录运行cmd执行sonar-scanner:会在终端输出分析信息,显示运行成功,我们就可以在SonarQube中查看到代码质量报告了在这里插入图片描述(截取输出末尾部分)在这里插入图片描述

第三步:下载cppcheck

下载网址:cppcheck download | SourceForge.net

配置环境路径PATH,并测试

在这里插入图片描述

在这里插入图片描述 因为sonar应用商场中,没有免费的c++检测插件,所以我们使用github上的开源文件进行平替

下载地址:Releases · SonarOpenCommunity/sonar-cxx · GitHub
下完后放到sonarqube解压文件夹的/extensions/plugins目录下

登录:localhost:9000 ,点击代码规则,可以看到C++(Community) (如果下载cxx插件版本为2.0以后,则看到 cxx),说明上述操作顺利完成

在这里插入图片描述

配置代码规则 -> 质量配置 -> 激活规则

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

 然后,在需要检查的工程文件处打开终端,输入

cppcheck -j 1 --enable=all --xml ./* 1>cppcheck-result.xml 2>&1

编辑 sonar-project.properties

在其中加入

sonar.cxx.cppcheck.reportPath=cppcheck-result.xml
soanr.cxx.includeDirectories=/

添加之前的原配置文件:

sonar.projectKey=项目名
sonar.projectName=项目名
sonar.projectVersion=1.0
sonar.sources=C:\\Users\\lenovo\\Desktop\\项目名
sonar.sourceEncoding=UTF-8
sonar.language=C++

开启故障检测和覆盖率检测的配置文件示例:

sonar.host.url=http://127.0.0.1:9000
#sonarqube用户名
sonar.login=sonar
#sonarqube密码
sonar.password=sonar2019
sonar.projectKey=testsonar
sonar.projectName=testsonar
sonar.sources=./
#这个属性可以解决和SVN的冲突问题,当扫描目录存在.svn文件时,就报出扫描错误,设为true即可避免
sonar.scm.disabled=true
sonar.cxx.cppcheck.reportPaths=reports/cppcheck.xml
sonar.cxx.cobertura.reportPaths=reports/coverage.xml
sonar.projectVersion=0.0.1-SNAPSHOT
sonar.language=c++
sonar.sourceEncoding=UTF-8
#设定被检测的文件后缀,避免误检
sonar.cxx.file.suffixes=.cxx, .cpp, .cc, .c, .hxx, .hh, .handled
#屏蔽sonarqube预留的付费c/cpp插件接口,避免与cxx-plugins冲突
sonar.lang.patterns.c=""
sonar.lang.patterns.cpp="

执行sonar-scanner

生成以下结果说明检测成功:

在这里插入图片描述

生成以下结果说明故障和覆盖率检测成功开启:

第四步(选择):sonarqube 导出PDF报告 

下载地址:https://gitee.com/zzulj/sonar-pdf-plugin

根据sonarqube版本,在“统计”下选择适配的pdf插件版本

版本列表

将下载好的sonar-pdfreport-plugin-xxx.jar 插件拷贝到 extensions\plugins 目录下。 

然后,重启服务:点击 Restart Server,等待服务重启完成。

重启按钮

 重启完成后,进入项目目录,在 more 下即可看到 Download PDF Report。

PDF下载路径

在Administration->Configuration->General Settings->PDF Report目录下,可以设置下载使用的用户名和密码:

PDF配置目录

 注意:重新启动服务后,重新使用sonar-scanner指令

c++代码检测

配置完成后,发现无法分析c++代码的bug和coverage。先后尝试了6.7和8.9版本,最后锁定8.9社区版,即可实现c++代码完整检测。

搭配postgresql 9.6,在sonar-scanner中设置(在sonar-scanner.properties中添加)

sonar.host.url=http://localhost:9000

sonar.jdbc.url, sonar.jdbc.username, sonar.jdbc.password同sonarqube中设置

设置cxx插件检测文件后缀:

 注:另外,2.0版本之后,plugin不再以 c++(community) 命名,而以 cxx 命名,同时,sonar.cxx.cppcheck.reportPath 改为 sonar.cxx.cppcheck.reportPaths,sonar.cxx.coverage.reportPath 不再支持,应当细分为扫描工具-coverage-路径,如 sonar.cxx.cobetura.reportPaths。

生成代码故障检测结果

先从pgadmin(postgresql 应用)连接数据库,然后打开 http://127.0.1:9000,这时,在rule中看到的不再是c++(community),而是cxx,这是c++插件2.0的特性。同样地,从quality profiles中新建cpp-demo,激活规则,无需选择语言,自动导入即可(注意:最后要将quality profiles中的cpp-demo设置为default)。

无需build-wrapper,只需先在工程文件夹下运行指令(注:需在git bash下运行,在powershell下运行该指令会报错,生成结果中会有多余部分):

cppcheck --enable=all --xml --xml-version=2 ./ 2> report/cppcheck.xml

再运行sonar-scanner即可检出(c++bug)

注:如在 windows 系统下需要运行以上指令,需要通过 git bash 指令框进行操作,如果使用 powershell 将会报错。Git bash 安装不再赘述。

生成覆盖率文件xml

Sonar C++ plugin只是完成了报告的读取,并没有任何代码分析的功能。任何的结果,都依赖于工具链中前述工具所生成的报告。

为了在cmake编译过程中生成gcov所需的文件,需要在根目录的makeLists.txt中加上以下语句:

OPTION(ENABLE_GCOV "Enable gcov" ON)

IF (ENABLE_GCOV)
  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage")
  SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage")
  SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fprofile-arcs -ftest-coverage -lgcov")
ENDIF()

编译成功后,运行可执行文件,对应 .gcda 文件也将生成在 build 目录下。找到 build 目录中,.gcda 文件的位置,会发现此处存在 .gcno 文件,运行 gcov -r .,将会把对应 .gcov 文件生成到根目录下。这时,对 .gcov 所处目录运行以下指令:

gcovr -r ./ -x --object-directory={.gocv 文件所在目录绝对路径}(可以使用 $(pwd)/xxx) >coverage.xml,将会生成 sonar-scanner 可以读取的覆盖率文件。

运行 gcov {test文件.gcno路径},在根目录下会生成所有使用到的代码文件的gcov文件结果


gcovr 安装,gcc+gcov是编译时一般Linux系统都有的,而gcovr是一个需要额外安装的gcov报告格式化的工具,它比lcov更好的一个场景是提供了cobetura兼容格式的xml报告。从而可以让sonar来解析c++的覆盖率报告。

在联网环境下,gcovr可以直接采取

注:gcovr 在 linux 服务器上离线安装,需要提前下载三个依赖库 .whl 文件(jinja2、lxml、pygments,其中lxml和python版本的匹配要求很高,我下载到第四个版本才成功安装,最终配置环境为 python 3.8.17 + lxml 4.6.3)。新版本 python 将无需提前下载 pip 和 setup 库,无 root 权限需要配置新 python 环境路径,通过 python3 和 pip3 进行调用。

8.9版本,需要在 sonar-project.properties 配置参数 sonar.cxx.cobetura.reportPaths(也可以在网页端 projects -> general settings -> cxx external analysis 中配置)

看不到任何安全热点:
1. 未激活安全漏洞检测
2. 未使用任何安全敏感api

注:默认的 vulnerability 检验规则较少,所以一般都显示为0
 

参考资料:

https://blog.csdn.net/weixin_45137861/article/details/97270856
https://blog.csdn.net/qq_43958699/article/details/115986320
 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值