Sonar-Scanner: 静态代码分析的利器

Sonar-Scanner: 静态代码分析的利器

在这里插入图片描述

懂得享受生活的过程,人生才会更有乐趣。每个人都会遇到一些陷阱,每个人都有过去,有的甚至是失败的往事。过去的错误和耻辱只能说明过去,真正能代表人一生的,是他现在和将来的作为。

1.介绍

在软件开发中,代码质量和安全性是两个至关重要的方面。为了确保代码的高质量和低风险,我们需要借助一些工具来自动化代码检查。SonarQube 是一款流行的开源平台,它提供了强大的代码分析能力。而 Sonar-Scanner 则是 SonarQube 的客户端,用于在本地或 CI/CD 流水线中分析项目代码并将结果发送到 SonarQube 服务器。

2.什么是 Sonar-Scanner?

Sonar-Scanner 是一个命令行工具,它负责将项目代码扫描并提交到 SonarQube 服务器。它支持多种编程语言,包括 Java、JavaScript、Python、C++ 等等。Sonar-Scanner 可以识别代码中的潜在问题,如代码异味(code smells)、漏洞、复杂度和测试覆盖率等。

在 Linux 环境下安装和配置 Sonar-Scanner

在 Linux 环境中,Sonar-Scanner 的安装和配置可以通过以下几个步骤完成。

1. 安装 Java

Sonar-Scanner 依赖于 Java 运行环境 (JRE),因此首先需要确保系统上已安装 Java。你可以使用以下命令来安装 OpenJDK:

sudo apt update
sudo apt install openjdk-11-jre

安装完成后,可以使用以下命令检查 Java 是否正确安装:

java -version

你应该看到类似于以下的输出:

openjdk version "11.0.11" 2021-04-20
OpenJDK Runtime Environment (build 11.0.11+9-Ubuntu-0ubuntu2.18.04)
OpenJDK 64-Bit Server VM (build 11.0.11+9-Ubuntu-0ubuntu2.18.04, mixed mode, sharing)

2. 下载 Sonar-Scanner

从 SonarSource 的官方站点下载 Sonar-Scanner 二进制文件。你可以使用 wget 命令:

wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.8.0.2856-linux.zip

请根据最新的版本号替换上面的 URL 中的版本号。

3. 解压缩 Sonar-Scanner

下载完成后,解压缩文件:

unzip sonar-scanner-cli-4.8.0.2856-linux.zip

解压后的目录通常为 sonar-scanner-4.8.0.2856-linux

4. 配置环境变量

为了方便地在命令行中使用 sonar-scanner 命令,需要将其添加到系统的 PATH 环境变量中。

编辑你的 shell 配置文件(例如 ~/.bashrc~/.zshrc)并添加以下行:

export SONAR_SCANNER_HOME=/path/to/sonar-scanner-4.8.0.2856-linux
export PATH=$SONAR_SCANNER_HOME/bin:$PATH

请将 /path/to/sonar-scanner-4.8.0.2856-linux 替换为你实际的 Sonar-Scanner 解压目录的路径。

保存并关闭文件后,执行以下命令以使更改生效:

source ~/.bashrc  # 或 source ~/.zshrc

5. 配置 Sonar-Scanner

在项目的根目录下创建一个 sonar-project.properties 文件,这是 Sonar-Scanner 的主要配置文件。以下是一个示例配置文件的内容:

# 必须的属性
sonar.projectKey=my-project-key
sonar.sources=src# 可选的属性
sonar.projectName=My Project
sonar.projectVersion=1.0
sonar.language=java
# 指定 SonarQube 服务器地址
sonar.host.url=http://localhost:9000
# 认证令牌
sonar.login=my-sonarqube-token
  • sonar.projectKey: 项目的唯一标识符。
  • sonar.sources: 项目源代码的相对路径。
  • sonar.host.url: SonarQube 服务器的 URL。
  • sonar.login: 用于认证的 SonarQube 令牌,可以从 SonarQube 的用户配置文件中生成。

6.运行 Sonar-Scanner

配置完成后,可以在项目的根目录下运行 Sonar-Scanner:

sonar-scanner

Sonar-Scanner 将读取 sonar-project.properties 文件中的配置,分析代码并将结果上传到指定的 SonarQube 服务器。

7.配置全局属性

如果有些属性在多个项目中通用,可以配置全局属性。编辑 sonar-scanner.properties 文件,该文件位于 Sonar-Scanner 安装目录下的 conf 目录中。例如:

# 默认的 SonarQube 服务器地址
sonar.host.url=http://localhost:9000
# 默认的认证令牌
sonar.login=my-default-token

这些全局配置将作为默认值,除非在项目的 sonar-project.properties 文件中被覆盖。

8.验证安装

执行 sonar-scanner -v 命令来验证 Sonar-Scanner 是否安装成功以及查看其版本:

sonar-scanner -v

你应该看到类似以下的输出:

INFO: Scanner configuration file: /path/to/sonar-scanner-4.8.0.2856-linux/conf/sonar-scanner.properties
INFO: Project root configuration file: /path/to/project/sonar-project.properties
INFO: SonarScanner 4.8.0.2856
INFO: Java 11.0.11 AdoptOpenJDK (64-bit)
INFO: Linux 5.4.0-74-generic amd64

在 GitLab CI/CD 中配置 Sonar-Scanner

将 Sonar-Scanner 集成到 GitLab CI/CD 中可以帮助自动化代码质量检查。在 GitLab 项目中,通过 .gitlab-ci.yml 文件定义 CI/CD 管道。以下是将 Sonar-Scanner 集成到 GitLab 的详细步骤:

1.先决条件

  1. SonarQube 服务器:需要一个运行的 SonarQube 实例,可以是自托管的,也可以是使用 SonarQube Cloud。
  2. SonarQube 项目:在 SonarQube 上为你的项目创建一个新项目,并获取项目的密钥(Project Key)。
  3. SonarQube 认证令牌:从 SonarQube 用户设置中生成一个用户令牌(User Token)。

2. 创建 GitLab CI 配置文件

在项目的根目录下创建或编辑 .gitlab-ci.yml 文件。添加以下配置:

stages:- build- test- sonar_scanvariables:SONAR_SCANNER_CLI_VERSION: "4.8.0.2856"SONAR_SCANNER_HOME: "/opt/sonar-scanner"SONAR_TOKEN: "$SONARQUBE_TOKEN"SONAR_HOST_URL: "http://your-sonarqube-server-url" # SonarQube服务器的URLbefore_script:- apt-get update -y- apt-get install -y openjdk-11-jre- wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-$SONAR_SCANNER_CLI_VERSION-linux.zip- unzip sonar-scanner-cli-$SONAR_SCANNER_CLI_VERSION-linux.zip- mv sonar-scanner-$SONAR_SCANNER_CLI_VERSION-linux $SONAR_SCANNER_HOMEsonar_scan:stage: sonar_scanscript:- $SONAR_SCANNER_HOME/bin/sonar-scanner -Dsonar.projectKey=my-project-key-Dsonar.sources=src-Dsonar.host.url=$SONAR_HOST_URL-Dsonar.login=$SONAR_TOKEN

3. 解释配置文件

  • stages: 定义 CI/CD 流水线的阶段。此示例包括 buildtestsonar_scan 三个阶段。

  • variables: 定义环境变量。

    • SONAR_SCANNER_CLI_VERSION: Sonar-Scanner 的版本号。
    • SONAR_SCANNER_HOME: Sonar-Scanner 安装目录。
    • SONAR_TOKEN: SonarQube 认证令牌,使用 GitLab 的 CI/CD 秘钥管理系统进行设置。
    • SONAR_HOST_URL: SonarQube 服务器的 URL。
  • before_script: 在所有任务之前执行的命令。此处用于安装必要的依赖和 Sonar-Scanner。

    • 安装 OpenJDK 11,这是 Sonar-Scanner 运行所需的。
    • 下载并解压 Sonar-Scanner。
  • sonar_scan: 定义 SonarQube 分析阶段的任务。

    • sonar.projectKey: SonarQube 项目的唯一标识符。
    • sonar.sources: 源代码目录。
    • sonar.host.url: SonarQube 服务器 URL。
    • sonar.login: SonarQube 的认证令牌。

4. 设置 GitLab CI/CD 秘钥

为了安全地存储 SonarQube 认证令牌,可以在 GitLab 中设置 CI/CD 秘钥:

  1. 进入 GitLab 项目的 “Settings”(设置)。
  2. 选择 “CI / CD” 选项。
  3. 在 “Variables”(变量)部分,点击 “Expand”(展开)。
  4. 点击 “Add variable”(添加变量)。
  5. 添加以下变量:
    • Key: SONARQUBE_TOKEN
    • Value: 你的 SonarQube 认证令牌
    • Type: Masked(遮蔽)

5. 触发管道

每次代码提交或合并请求时,GitLab CI/CD 会自动运行管道,执行定义的各个阶段。在 sonar_scan 阶段,Sonar-Scanner 将分析代码并将结果上传到 SonarQube 服务器。

6.示例项目结构

假设你的项目结构如下:

my-project/
├── src/
│   └── main/
│       └── java/
│           └── com/
│               └── example/
│                   └── MyClass.java
└── .gitlab-ci.yml

src 目录下是源代码,而 .gitlab-ci.yml 文件位于项目根目录。

Sonar-Scanner 集成到 Jenkins 中

将 Sonar-Scanner 集成到 Jenkins 中,可以在构建过程中自动进行代码质量检查。以下是如何在 Jenkins 中配置 Sonar-Scanner 进行代码分析的详细步骤。

1.先决条件

  1. Jenkins 服务器:确保 Jenkins 已安装并运行。
  2. SonarQube 服务器:需要一个运行的 SonarQube 实例。
  3. SonarQube 项目:在 SonarQube 上为你的项目创建一个新项目,并获取项目的密钥(Project Key)。
  4. SonarQube 认证令牌:从 SonarQube 用户设置中生成一个用户令牌(User Token)。

2. 安装 SonarQube Scanner 插件

首先,需要在 Jenkins 中安装 SonarQube Scanner 插件:

  1. 打开 Jenkins 控制面板。
  2. 进入 “Manage Jenkins”(管理 Jenkins)。
  3. 选择 “Manage Plugins”(管理插件)。
  4. 切换到 “Available”(可用插件)选项卡。
  5. 搜索 “SonarQube Scanner” 插件并安装。

安装完成后,重启 Jenkins 以应用插件。

3. 配置 SonarQube 服务器

安装插件后,需要在 Jenkins 中配置 SonarQube 服务器:

  1. 进入 “Manage Jenkins”(管理 Jenkins)。

  2. 选择 “Configure System”(配置系统)。

  3. 向下滚动到 “SonarQube servers”(SonarQube 服务器)部分。

  4. 点击 “Add SonarQube”(添加 SonarQube)。

  5. 配置以下信息:

    • Name(名称):给你的 SonarQube 实例一个标识名称。
    • Server URL(服务器 URL):SonarQube 服务器的 URL。
    • Server authentication token(服务器认证令牌):使用上面生成的 SonarQube 用户令牌。
  6. 保存配置。

4. 安装和配置 SonarQube Scanner

  1. 进入 “Manage Jenkins”(管理 Jenkins)。
  2. 选择 “Global Tool Configuration”(全局工具配置)。
  3. 向下滚动到 “SonarQube Scanner” 部分。
  4. 点击 “Add SonarQube Scanner”(添加 SonarQube Scanner)。
  5. 给它一个名称(例如 “SonarQube Scanner”),然后选择 “Install automatically”(自动安装)选项。

5. 创建 Jenkins 任务

  1. 在 Jenkins 主界面,点击 “New Item”(新建任务)。
  2. 输入任务名称,选择 “Freestyle project”(自由风格项目),然后点击 “OK”。
  3. 配置任务的常规信息,如源码管理(使用 Git 等)和构建触发器。

6. 配置 SonarQube 分析步骤

在任务配置页面中,添加一个构建步骤:

  1. 在 “Build”(构建)部分,点击 “Add build step”(添加构建步骤)。
  2. 选择 “Execute SonarQube Scanner”(执行 SonarQube Scanner)。

配置 SonarQube Scanner 构建步骤:

  • Analysis properties(分析属性):添加 SonarQube 扫描所需的属性。你可以使用键值对的格式配置这些属性,如下所示:
sonar.projectKey=my-project-key
sonar.sources=src
sonar.host.url=http://your-sonarqube-server-url
sonar.login=my-sonarqube-token

这些属性包括:

  • sonar.projectKey: SonarQube 项目的唯一标识符。
  • sonar.sources: 源代码目录。
  • sonar.host.url: SonarQube 服务器的 URL。
  • sonar.login: SonarQube 的认证令牌。

7. 保存并运行任务

配置完成后,点击 “Save”(保存)。然后可以手动运行该任务或等待构建触发器(如源码变更)自动执行任务。

8.使用 Pipeline 脚本

如果你使用的是 Jenkins Pipeline,可以在 Jenkinsfile 中配置 SonarQube Scanner。以下是一个示例 Pipeline 脚本:

pipeline {agent anytools {sonarQube 'SonarQube Scanner' // SonarQube Scanner的工具名称}stages {stage('Build') {steps {echo 'Building...'// 添加你的构建步骤,例如编译代码}}stage('SonarQube Analysis') {steps {script {// 需要配置 SonarQube 服务器信息def scannerHome = tool 'SonarQube Scanner'withSonarQubeEnv('SonarQube Server') { // SonarQube 服务器的名称sh "${scannerHome}/bin/sonar-scanner -Dsonar.projectKey=my-project-key -Dsonar.sources=src"}}}}}post {always {echo 'Post actions...'// 添加需要在任务结束时执行的步骤}}
}

通过将 Sonar-Scanner 集成到 Jenkins,你可以在构建过程中自动执行代码质量分析,并将结果发布到 SonarQube 服务器。这有助于在持续集成/持续交付(CI/CD)管道中早期发现和解决代码问题,提高代码质量和安全性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/388016.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【更新2022】省级农民专业合作社数量 无缺失 2006-2022

省级农民专业合作社数量是研究中国农村经济组织和农业社会化服务的重要数据。这些数据可以用来分析不同省份农业生产组织形式的多样性及其对农民生产、技术创新和收入增长的影响。研究者可以基于这些数据,探讨农民专业合作社在提升农产品质量、优化农业生产结构和推…

Transformer处理文本分类实例(Pytorch)

文章目录 Transformer处理文本分类实例参考网站我们构建一个实例问题,预测AG_NEWS的文本分类AG_NEWS数据集介绍预测目标总体思路(简述)主要流程数据预处理dataset构建(不是重点)构建词表 编写处理模型执行词嵌入位置编码(PositionalEncoding)(*核心)多层Transformer模块多头自注…

Mojo数据类型详解

Mojo 中的所有值都分配有相对应的数据类型,大多数类型都是由结构体定义的标称的类型。这些类型是标称的(或“命名的”),因为类型相等性是由类型的名称而不是其结构决定的。 有一些类型未定义为结构,例如下面的两种情况…

百款精选的HTML5小游戏源码,你可以下载并直接运行在你的小程序或者自己的网站上

今天我带来了一份特别的礼物——百款精选的HTML5小游戏源码,你可以下载并直接运行在你的小程序或者自己的网站上,只需双击index.html即可开始。无论你是在寻找创意引流,还是想为你的网站增添互动性,这些小游戏都能帮你实现&#x…

办公必备!一键把PDF转换为PPT文件,只需这3款神器!

在当今数字化办公环境中,文件格式的转换已成为提高工作效率的关键因素之一。其中,PDF(便携式文档格式)和PPT(PowerPoint演示文稿)是两种广泛使用的文件格式。然而,有时我们需要将PDF文件转换为PPT格式,以便进行编辑或演示。 为方…

数据结构的基本概念与算法

数据结构的基本概念与算法 什么是数据? 数据是信息的载体,是描述客观事物属性的数、字符以及所有能输入到计算机中并被计算机程序识别和处理的符号的集合;总结来说 -> 数据就是计算机程序加工的原料; 数据元素、数据项&#xf…

<数据集>棉花识别数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:13765张 标注数量(xml文件个数):13765 标注数量(txt文件个数):13765 标注类别数:4 标注类别名称:[Partially opened, Fully opened boll, Defected boll, Flower] 序…

Java面试——Tomcat

优质博文:IT_BLOG_CN 一、Tomcat 顶层架构 Tomcat中最顶层的容器是Server,代表着整个服务器,从上图中可以看出,一个Server可以包含至少一个Service,用于具体提供服务。Service主要包含两个部分:Connector和…

SQL labs-SQL注入(七,sqlmap对于post传参方式的注入,2)

本文仅作为学习参考使用,本文作者对任何使用本文进行渗透攻击破坏不负任何责任。参考:SQL注入之Header注入_sqlmap header注入-CSDN博客 序言: 本文主要讲解基于SQL labs靶场,sqlmap工具进行的post传参方式的SQL注入&#xff0c…

【Java版数据结构】初识泛型

看到这句话的时候证明:此刻你我都在努力 加油陌生人 br />个人主页:Gu Gu Study专栏:Java版数据结构 喜欢的一句话: 常常会回顾努力的自己,所以要为自己的努力留下足迹 喜欢的话可以点个赞谢谢了。 作者&#xff1…

【全国大学生电子设计竞赛】2024年E题

🥰🥰全国大学生电子设计大赛学习资料专栏已开启,限时免费,速速收藏~

快速查找WGS1984 坐标地理坐标系转UTM投影坐标的多种方法

在arcgis中如果是要计算长度或面积,则需要将矢量图层地理坐标系转为投影坐标系,下面总结了几种快速找到“WGS 1984”(UTM ZONE)投影带号的方法。 一、准备工作 软件:arcmap 示例数据:安微省shp矢量图 二…

删除链表的倒数第N个结点(LeetCode)

题目 给你一个链表,删除链表的倒数第个结点,并且返回链表的头结点。 示例1: 输入:, 输出: 示例2: 输入:, 输出: 示例3: 输入:&#x…

申瓯通信设备有限公司在线录音管理系统(复现过程)

漏洞简介 申瓯通信设备有限公司在线录音管理系统 index.php接口处存在任意文件读取漏洞,恶意攻击者可能利用该漏洞读取服务器上的敏感文件,例如客户记录、财务数据或源代码,导致数据泄露 一.复现过程 fofa搜索语句:title"在线录音管…

【Vue3】标签的 ref 属性

【Vue3】标签的 ref 属性 背景简介开发环境开发步骤及源码 背景 随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋斗的日子。…

Ubuntu22.04手动安装fabric release-2.5版本

这个过程稍微有点复杂,但完整操作完成以后会对Fabric网络有更加深入的理解,方便后续自己手动搭建Fabric网络。这个过程需要手动逐个下载Fabric源代码、使用命令下载Fabric镜像和用Git下载例子程序。 Fabric源代码主要用途是用来编译cryptogen、configtx…

二叉搜索树(图解)

文章目录 二叉搜索树的概念插入查找二叉搜索树的删除操作删除单孩子和叶子节点。del节点有两个孩子用左子树的最大节点替代用右子树的最小节点替代 弊端 二叉搜索树的概念 对于每颗子树&#xff0c;左子树 < 根&#xff0c;右子树 > 根。 二叉搜索树有以下操作&#xff1…

代码随想录二刷(哈希表)

代码随想录二刷(哈希表) 三数之和思路反正对于我来说是真的难想出来。 若这道题还是采用哈希表的思路去做&#xff0c;非常麻烦&#xff0c;并且还要考虑去重的操作。所以这道题其实用双指针&#xff0c;是更方便的。 具体程序如下&#xff1a; class Solution:def threeSu…

Docker简介和Docker常见命令

目录 1. Docker 简介 1.1 Docker 的核心概念 1.2 Docker 的优势 1.3 Docker 工作流程 2. 常见命令 2.1 基本命令 2.2 镜像操作 2.3 容器操作 2.4 网络操作 2.5 卷操作 2.6 日志和监控 2.7 清理命令 3. 注意事项和最佳实践 3.1 镜像操作 3.2 容器操作 3.3 网络操…

2.1、matlab绘图汇总(图例、标题、坐标轴、线条格式、颜色和散点格式设置)

1、前言 在 MATLAB 中进行绘图是一种非常常见且实用的操作,可以用来可视化数据、结果展示、分析趋势等。通过 MATLAB 的绘图功能,用户可以创建各种类型的图形,包括线图、散点图、柱状图、曲线图等,以及三维图形、动画等复杂的可视化效果。 在绘图之前,通常需要先准备好要…