前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CI&CD夺命十三剑9-Sonar Scanner使用配置&SonarQube项目命令行接入

CI&CD夺命十三剑9-Sonar Scanner使用配置&SonarQube项目命令行接入

作者头像
大刚测试开发实战
发布2023-08-29 16:15:23
9290
发布2023-08-29 16:15:23
举报

前言

在前面一篇《代码质量扫描工具SonarQube原理及环境搭建》中,我们介绍了Sonarqube的架构组成、工作原理以及环境搭建相关操作。本篇将会重点介绍:

  1. Sonar Scanner的使用配置;
  2. 利用Sonar Scanner在命令行扫描分析Java代码;
  3. 利用Sonar Scanner在命令行扫描分析Python代码;

一、SonarQube框架回顾

下面先来回顾一下SonarQube的架构组成:

Sonarqube的架构可以分为以下几个部分:

  • 数据库层:Sonarqube使用一个数据库来存储所有的代码质量数据。
  • 应用程序层:Sonarqube的应用程序层包括一系列基于Java的Web应用程序,这些应用程序负责收集数据、分析代码和生成报告等任务。
  • 插件层:Sonarqube的插件层是一个可扩展的架构,它允许用户安装和使用各种不同的插件来增强Sonarqube的功能和灵活性。
  • 数据采集层:Sonarqube支持多种不同的代码仓库和版本控制系统,包括SVN、Git、Mercurial和ClearCase等。使用这些数据采集插件,Sonarqube可以轻松地从不同的代码库中收集数据。

二、Sonar Scanner简介

Sonar Scanner是一种静态代码分析工具,旨在帮助开发者带来更高质量的代码。它提供了一个工作流,通过扫描代码并提供有关编码错误、漏洞、代码异味等方面的问题的反馈,帮助开发团队优化其代码质量。

Sonar Scanner基于SonarQube平台,可利用其强大的规则引擎分析多种编程语言,包括Java、C#、JavaScript、Python、Go等。Sonar Scanner可作为静态代码分析流程的一部分,通过与构建系统集成实现自动化分析,也可在将其作为一个插件运行于IDE中并为开发人员提供快速反馈。

Sonar Scanner的优点包括:

  1. 提升代码质量:Sonar Scanner可以帮助开发者快速和准确地发现代码中的问题,从而改进代码质量并减少技术债务的问题。
  2. 支持多种语言:Sonar Scanner支持多种开发语言,从而满足不同开发者的需求。
  3. 自动化分析:通过构建系统或集成到CI/CD流程中,Sonar Scanner可以自动化分析代码并持续改进代码质量。

三、Sonar Scanner安装与配置

sonar主要是借助客户端检测工具来检测代码,使用sonar必须配置好本地客户端检测工具,下载地址:https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/,下载完成后解压。

1.配置Sonar Scanner

Windows系统

将sonar-scanner\bin目录添加到环境变量

Linux系统

将/home/sonar-scanner/bin目录添加到环境变量

2.Sonar Scanner连接服务配置

① 生成令牌

我的账号-安全:生成令牌

② 将令牌复制到sonar scanner配置文件中

配置文件目录sonar-scanner/conf/sonar-scanner.properties

注:若在前面配置sonar时端口号修改为非9000,则需要在sonar-scanner.properties中指定URL

四、Sonar Scanner代码检测

1.利用Sonar命令行分析JAVA代码-方法一

通过sonar-project.properties配置文件分析代码,具体流程如下:

① clone项目代码

如果本地有java项目,可以分析本地java项目的代码,如果本地没有java项目,可以从网上克隆一个java开源项目的代码

代码语言:javascript
复制
git clone https://gitee.com/hujix/jrequests.git

② 在项目根目录创建一个target文件夹

使用sonar scanner分析时会用到,如果工程下存在target目录则不需要创建,否则会报错

代码语言:javascript
复制
cd jrequests
mkdir target

③ 在项目根目录下创建sonar-project.properties文件

sonar-project.properties内容:

代码语言:javascript
复制
# 登录sonar的token
sonar.login=6874308b3dee33cd1cb299c291af478947c4aa54
# 项目唯一标识,每个项目都不能重复
sonar.projectKey=my:project
# 展示在SonarQube UI的项目名称,可以与Git拉取的项目名称不一致(不能是中文)
sonar.projectName="JAVA-Requests"
# 项目的版本号
sonar.projectVersion=0.1
# 项目的代码的编码格式
sonar.sourceEncoding=UTF-8
# 项目的语言
sonar.language=java
# 项目的源代码目录
sonar.sources=src
# 项目的编译目录
sonar.java.binaries=target

④ 执行sonar scanner读取项目配置信息sonar-project.properties,开始扫码分析

代码语言:javascript
复制
sonar-scanner

执行结果如下:

⑤ 查看sonar控制台展示

扫描分析完成后会生成分析报告,sonar scanner会连接sonar服务,并将分析报告传递给sonar服务器,从而在控制台展示。

可以看出,当前项目共有2个bug,11个漏洞,51个坏味道,重复率为25.7%

2.利用Sonar命令行分析JAVA代码-方法二

利用sonarqube自动生成扫描命令:

① 创建项目

② 创建或使用已有令牌

可以创建一个新令牌,也可以使用前面生成的令牌

③ 选择对应语言,自动生成扫描命令

④ 进入要检测的项目工程根目录,执行扫描命令

代码语言:javascript
复制
sonar-scanner \
  -Dsonar.projectKey=test-jrequests \
  -Dsonar.sources=. \
  -Dsonar.host.url=http://192.168.1.122:9000 \
  -Dsonar.login=6874308b3dee33cd1cb299c291af478947c4aa54

但是在执行过程中出现了报错“org.sonar.java.AnalysisException: Please provide compiled classes of your project with sonar.java.binaries property”

后来在这篇博文《sonar-scanner连接sonarquebe7的sonar.java.binaries问题对应》中找到了答案:

大概意思就是,自4.12起,分析将失败,并显示以下消息:请使用sonar.java.binaries属性提供项目的编译类

先看下我本地/home/sonar/sonarqube/extensions/plugins目录下的sonar-java-plugin版本,版本为5.10.1.16922.jar;

解决办法:将 sonar-java-plugin-5.10.1.16922.jar 版本替换为4.12版本以下的,重新执行前面的扫描命令即可;

3.maven集成sonar

1)maven简介

https://docs.sonarqube.org/latest/analysis/analysis-parameters/

管理Java依赖包,类似于Python的pip,同时还提供项目的全生命周期管理,如打包构建、代码比对、测试、集成测试、安装、部署、管理项目报告,生成站点,管理JAR文件等。

2)maven vs ant
3)配置maven环境变量

① Windows系统安装配置maven

可以参考前面的一篇《Jenkins接入maven构建后端springboot项目》;

② Linux系统安装配置maven

需要编辑/etc/profile 配置文件,将apache-maven的bin目录加入到环境变量

代码语言:javascript
复制
# maven
export MAVEN_HOME=/home/apache-maven-3.6.3
export PATH=${PATH}:${MAVEN_HOME}"/bin"

随后执行source /etc/profile命令重新加载环境变量。

输入mvn -help出现以下内容表示安装配置成功:

4)maven常用命令
代码语言:javascript
复制
mvn archetype:generate 创建Maven项目
mvn compile 编译源代码
mvn deploy 发布项目
mvn test-compile 编译测试源代码
mvn test 运行应用程序中的单元测试
mvn site 生成项目相关信息的网站
mvn clean 清除项目目录中的生成结果
mvn package 根据项目生成的jar
mvn install 在本地Repository中安装jar
mvn eclipse:eclipse 生成eclipse项目文件
mvnjetty:run 启动jetty服务
mvntomcat:run 启动tomcat服务
mvn clean package -Dmaven.test.skip=true:清除以前的包后重新打包,跳过测试类
5)如何判断项目是否是通过maven管理的

只要项目存在pom.xml,此项目就是用maven管理的,执行maven命令时,maven会根据pom.xml文件中的配置自动下载依赖包。例如我们前面克隆的jrequests项目下,就有pom.xml文件:

6)maven配置文件中配置sonar

配置apache-maven的conf/settings.xml文件,添加如下配置,用于连接sonar服务:

代码语言:javascript
复制
<profile>
    <id>sonar</id>
              <activation>
                <activeByDefault>true</activeByDefault>
               </activation>
               <properties>
                <!--平台登录的账号的令牌,格式:姓全拼+名第一个字母-->
                <sonar.login>6874308b3dee33cd1cb299c291af478947c4aa54</sonar.login>
                <!--sonarqube访问地址-->
                <sonar.host.url>http://192.168.1.122:9000</sonar.host.url>
                <!--代码分析包括哪些文件需要分析,英文逗号分隔-->
                <sonar.inclusions>**/*.java,**/*.xml</sonar.inclusions>
               </properties>
</profile>
7)通过maven分析代码

① 进入要检测的代码工程目录,cmd命令行执行mvn sonar:sonar命令

若出现以下报错“Failed to execute goal org.sonarsource.scanner.maven:sonar-maven-plugin:3.9.1.2184:sonar (default-cli) on project Jrequests: Please provide compiled classes of your project with sonar.java.binaries property”,是因为项目的sonar-project.properties文件中配置了”sonar.java.binaries=target“,而工程未经过编译,没有生成target相关的文件。

所以需要先执行编译操作,生成target相关的文件:

代码语言:javascript
复制
mvn package
mvn sonar:sonar

再次执行扫描,成功:

② sonarqube控制台查看检测结果

这里的项目名称默认的是读取的该代码工程根目录下pom.xml文件中的“artifactId”字段的内容

4.利用Sonar命令行分析Python代码

① 项目工程下新建sonar-project.properties文件

扫描上一篇文章介绍的"auto_test_project"代码工程,sonar-project.properties内容如下:

代码语言:javascript
复制
# 登录sonar的token
sonar.login=6874308b3dee33cd1cb299c291af478947c4aa54
# 项目的key
sonar.projectKey=my:auto_test_project
# this is the name displayed in the SonarQube UI,不能是中文
sonar.projectName="auto_test_project"
# 项目的版本号
sonar.projectVersion=3.0
# 项目的代码的编码格式
sonar.sourceEncoding=UTF-8
# 项目的语言
sonar.language=py
# 项目的源代码目录
# 若此处配置的是 . 
# 当前目录,则sonar-scanner会扫描整个工程目录,包括venv目录,由于第三方包文件较多,会导致扫描和分析时间过长
# 可以指定目录扫描sonar.sources=./api_test
sonar.sources=./api_test

② 执行扫描命令

代码语言:javascript
复制
sonar-scanner

③ sonarqube控制台查看检测结果

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-05-24,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 测试开发实战 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、SonarQube框架回顾
  • 二、Sonar Scanner简介
  • 三、Sonar Scanner安装与配置
    • 1.配置Sonar Scanner
      • Windows系统
      • Linux系统
    • 2.Sonar Scanner连接服务配置
    • 四、Sonar Scanner代码检测
      • 1.利用Sonar命令行分析JAVA代码-方法一
        • 2.利用Sonar命令行分析JAVA代码-方法二
          • 3.maven集成sonar
            • 1)maven简介
            • 2)maven vs ant
            • 3)配置maven环境变量
            • 4)maven常用命令
            • 5)如何判断项目是否是通过maven管理的
            • 6)maven配置文件中配置sonar
            • 7)通过maven分析代码
          • 4.利用Sonar命令行分析Python代码
          相关产品与服务
          腾讯云代码分析
          腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
          http://www.vxiaotou.com