Sonarqube扫描c++代码

cxx-plugin介绍及其下载安装

这个c++插件sonar-cxx整合了一些现有的 c++ 代码检测工具,使得社区版的 sonarqube 能够支持对 c++ 代码的检测。具体支持的 c++ 代码检测工具可以通过sonar-cxx项目中README.md进行查看。本文档中涉及的 c++ 检测工具为 cppcheck。根据下方图片中表格通过 sonarqube 版本选择对应 sonar-cxx 版本,作者本地 sonarqube的版本为 7.9.1,最后选择了sonar-cxx-plugin-1.3.2.1853这个版本。将下载后的 jar 文件放在对应的extensions中并重启sonarqube 服务即可。

截屏2022-09-05 11.46.47.png

Sonarqube c++规则配置

sonarqube 中 c++使用的默认规则 Sonar Way中检查规则无法主动进行激活,通过github搜索获得相关解决办法。通过对默认的 Sonar Way规则进行扩展操作获得自己的 sonarway_extension规则,激活其中相关的 c++检查规则并选择需要使用此规则配置的项目即可解决 c++无生效规则的问题。相关 github 页面https://github.com/SonarOpenCommunity/sonar-cxx/wiki/Manage-Quality-Profiles

具体操作如下图一中所示,首先对默认规则 Sonar way 进行扩展,点击图中绿色箭头指向的扩展选项,创建一个基于 Sonar way 的 sonarway_extension 的扩展,创建完成后如下图二所示。

1662359116729.jpg
截屏2022-09-05 09.48.08.png

在下图三中点击激活更多规则选项,进入下图四页面中并找到刚创建完成的sonarwayextension配置并在下图五中的批量操作选项中激活 sonarwayextension中的规则配置。最后在下图六点击修改项目按钮,如下图七所示选择应用 sonarway_extension的项目

1662358775747.jpg
1662358995479.jpg
1662358959730.jpg
截屏2022-09-05 09.50.33.png
截屏2022-09-05 14.09.12.png

Sonarqube c++ 扫描流程

下方脚本为 c++ 项目本地提交脚本。
L5为设定 PATH 环境变量,将 sonar-scanner加入环境变量中。
L10-L12为设定c++项目提交时的 sonarqube 服务 URL 及对应项目信息。
L18-L27为cppcheck 对 c++ 项目进行检测的过程。
L29-L49为循环操作,使用 sonar-scanner 对c++项目进行扫描并使用 cppcheck 检查结果将扫描结果进行上传分析。
相关 github 页面
https://github.com/SonarOpenCommunity/sonar-cxx
https://github.com/SonarOpenCommunity/sonar-cxx/wiki/sonar.cxx.cppcheck.reportPaths

#! /bin/bash
set -exo
whoami

PATH=$PATH:/usr/local/go/bin:/usr/local/node/bin:/usr/local/sonar-scanner/bin
echo $PATH

current_path=`pwd`

export sonarqube_url="xxxxx"
export sonarqube_key="xxxxx"
export sonarqube_token="xxxxx"

echo $sonarqube_url
echo $sonarqube_key
echo $sonarqube_token

cppcheck -v -j 1 --enable=all --xml ./* 1>cppcheck_result.xml 2>&1
cppcheck_result=$?
# 0表示提交成功,跳出循环
if [ "$sonarqube_result" = "0" ]
then
  echo "cppcheck 检测成功"
else
  echo "cppcheck 检测失败"
  exit 1
fi

for i in {1..5}
do
  echo "第$i次提交测试结果"
  sonar-scanner -Dsonar.projectKey=${sonarqube_key} -Dsonar.sources=${current_path} \
  -Dsonar.cxx.includeDirectories=${current_path} -Dsonar.exclusions=**/zdpts_coverage.sh,**/*_result.xml,**/*.java \
  -Dsonar.host.url=${sonarqube_url} -Dsonar.tests=${current_path} -Dsonar.test.inclusions=**/*_test.cpp \
  -Dsonar.login=${sonarqube_token} -Dsonar.language=cxx -Dsonar.cxx.file.suffixes=.h,.cpp -Dsonar.sourceEncoding=UTF-8  \
  -Dsonar.projectVersion=1.0 -Dsonar.cxx.cppcheck.reportPath=${current_path}/cppcheck_result.xml
  sonarqube_result=$?
  # 0表示提交成功,跳出循环
  if [ "$sonarqube_result" = "0" ]
  then
    break
  # 1表示提交失败,休眠10s等待继续提交
  elif [ "$sonarqube_result" = "1" ]
  then
    echo "第$i次提交失败"
    sleep 10s
    continue
  fi
done

结果上传后,可见如下图所示的结果,即表示 c++ 项目检测成功

截屏2022-09-05 14.12.51.png

你可能感兴趣的:(Sonarqube扫描c++代码)