`
阅读更多

 

Sonar 是一个用于代码质量管理的开源平台。通过插件,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具,对不同规模和种类的工程进行代码质量管理。

 

1. SonarQube 在进行 C/C++ 代码质量管理时的工作原理:

SonarQube 服务器根据分析报告按照对应的规则展示扫描的结果。只使用 sonar-scanner 是无法扫描 c++ 的,SonarQube 服务器上的 sonar-cxx 插件本身是不会运行任何静态代码分析工具的,需要通过 cppcheck、valgrind 等分析工具。所以需要确保在分析之前生成报告。

集成每个代码静态分析工具的思路,其实就是先使用 Cppcheck 分析工具给你的项目代码在本地扫一遍,并在项目目录生成相应的 xml 报告,然后 sonar-scanner 将报告和代码上传到 SonarQube 服务器,通过服务器上的 sonar-cxx 插件使这些报告与 SonarQube 的代码规则进行匹配,最终展示缺陷结果。

 

2. Sonar 接入实现 C/C++ 代码质量分析的过程:

 
2.1 在 SonarQube 服务器上初始化项目 【test:project-alpha-1.x】。

 

2.2 在 SonarQube 服务器上提供令牌。

该令牌用于在执行分析时识别您。如果它已被泄露,您可以随时在您的用户帐户中撤销它。
以下是根据 xxx@xxx.com 生成的令牌:
token: 19t81a5123a90ga25123a90ga25

 

2.3 我们在 SonarQube 上初始化了项目,现在来启动分析!

 

  1. sonar 服务器生成 token 中,哪个选项最能描述您的构建?
    Maven,Gradle,.NET,Other(用于 JS、TS、Go、Python、PHP,…)。此处选择 Other。

  2. sonar 服务器生成 token 中,What is your OS?
    Linux,Windows,macOS。此处选择 Windows。

  3. 下载并解压缩适用于 Windows 的 Scanner 应用。访问 Scanner官方文档下载最新版本(sonar-scanner-cli-4.7.0.2747-windows.zip)。

  4. 并将 Scanner 应用的 bin 目录添加到 %PATH% 环境变量中(Setting - Advanced system setting - System Property - Enviroment Variables - System variables - path, 添加 “D:\Workspace\Sonar\sonar-scanner-4.7.0.2747-windows\bin”)。

  5. 从您的计算机执行 Scanner。运行 SonarQube 分析非常简单。您只需要在项目文件夹中执行以下命令。详细请访问 Scanner 的官方文档

    sonar-scanner.bat
     -D"sonar.projectKey=VR:ue-launcher" -D"sonar.sources=." 
    -D"sonar.host.url=http://xxx.xx.xxx.xxx:1000" 
    -D"sonar.login=19t81a5123a90ga25123a90ga25"

     

  6. 分析完成后,该页面会自动刷新,或者打开 http://xxx.xx.xxx.xxx:1000 手动刷新(根据生成报告上传的大小,可能需要几秒,多刷新几次),你可以浏览分析结果。
    此时可以看到没有使用 C++ 代码静态分析工具生成 xml 报告,数据和显示结果都默认是空的,没有产生 C++ 项目对应的 bug。

  7. 这是因为 SonarQube 需要读取 cppcheck 分析后的结果,因此我们需要写一个配置文件让 sonar-scanner 读取 cppcheck 分析后的结果。

2.4 CppCheck 代码缺陷静态检查工具。

 

C/C++ 代码的静态分析。

检查:内存泄漏、不匹配的分配释放、缓冲区溢出等等。目标是 0% 的误报。有关详细信息,请参阅 https://cppcheck.sourceforge.io。

Cppcheck 只检查编译器检查不出来的 bug,不检查语法错误。也可以使用一些其他分析工具。

 

  1. cppcheck 下载地址

  2. 安装 cppcheck。此处选择 Windows 64-bit (No XP support) 版本。也可以通过 Source Code 生成。

  3. 将 Cppcheck 应用的 bin 目录添加到系统 %PATH% 环境变量中。
    Setting - Advanced system settings - System Properties - Environment Variables - System Variables - Path,添加安装路径
    D:\Program Files\Cppcheck

  4. 测试一下安装是否成功。控制台使用以下指令:
    cppcheck

  5. 在项目根目录下生成配置文件。
    cppcheck -j 1 --enable=all --xml ./* 1>cppcheck-result.xml 2>&1

 可以看到项目中产生了两个文件:cppcheck.report.xml、cppcheck-result.xml。

 后期需要在 sonar-project.properties 中加入:

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

 

2.5 配置您的项目。

 

此处使用的是 git 本地 master 仓库的项目根目录 “project-alpha-1.x”。

在项目的根目录中创建一个名为 sonar-project.properties 的配置文件。

 

# defaults to project key
# sonar 平台中对应项目的名字
sonar.projectName=test:project-alpha-1.x
# defaults to 'not provided'
# sonar 平台中对应项目的版本号
sonar.projectVersion=1.x

# Path is relative to the sonar-project.properties file. Defaults to .
# sonar 检测的源文件目录,‘.’表示当前根目录下的所有文件
# sonar.sources=.
sonar.sources=Plugins,Source

# sonar 检测的语言种类
sonar.language=cxx
sonar.cxx.file.suffixes=.h,.cpp

# Encoding of the source code. Default is default system encoding
# sonar 平台中对应项目的编码格式
sonar.sourceEncoding=UTF-8

sonar.host.url=http://xxx.xx.xxx.xxx:1000/
sonar.login=19t81a5123a90ga25123a90ga25

sonar.scm.disabled=true
sonar.java.binaries=target/classes
sonar.cfamily.build-wrapper-output=build_wrapper_output_directory

sonar.cxx.cppcheck.reportPaths=cppcheck-result.xml
sonar.cxx.includeDirectories=/

 

 

2.6 安装并运行 SonarScanner。

 

请执行以下步骤:

 

  1. 将下载的文件展开到您选择的目录中。在接下来的步骤中,我们将其称为 $install_directory。

  2. 通过编辑 $install_directory/conf/sonar-scanner.properties 更新全局设置以指向您的 SonarQube 服务器:

    #Configure here general information about the environment, such as SonarQube server connection details for example
    #No information about specific project should appear here
    #----- Default SonarQube server
    sonar.host.url=http://xxx.xx.xxx.xxx:1000
    #----- Default source code encoding
    sonar.sourceEncoding=UTF-8
     
  3. 将 $install_directory/bin 目录路径添加到您的系统环境变量。

  4. 通过打开一个新的 shell 并执行命令 sonar-scanner 或 sonar-scanner -h(在 Windows 上为 sonar-scanner.bat -h)来验证您的安装。你应该得到这样的输出:

    usage: sonar-scanner [options]
    
    Options:
      -D,--define <arg>     Define property
      -h,--help             Display help information
      -v,--version          Display version information
      -X,--debug            Produce execution debug output
    如果您需要更多调试信息,可以在命令行中添加以下内容之一:-X、—verbose 或 -Dsonar.verbose=true。先使用 cppchek 生成 XML 分析报告,然后使用 sonar-scanner 完成扫描上传。

     先在项目根目录执行:

    cppcheck -j 1 --enable=all --xml ./* 1>cppcheck-result.xml 2>&1
     然后从项目根目录运行以下命令以启动分析并传递您的身份验证令牌:
    sonar-scanner -D sonar.login=19t81a5123a90ga25123a90ga25
     

    如果您完成登录过程,也可以直接运行:

    sonar-scanner

     最后等待 SonarQube 服务器刷新,或手动刷新即可看到展示结果。

1
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics