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

news2024/11/13 9:38:11

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_scan

variables:
  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服务器的URL

before_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_HOME

sonar_scan:
  stage: sonar_scan
  script:
    - $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 any
    tools {
        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.coloradmin.cn/o/1965386.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EmoBench:评估大模型的情感智能

人工智能咨询培训老师叶梓 转载标明出处 情感智能是识别、理解和管理自己和他人的情感的能力,对于塑造人际关系、改善决策和影响整体福祉至关重要。尽管情感智能系统被认为具有相似的好处,但现有研究主要集中于情绪识别,忽视了情绪调节和通过…

传知代码-上下位关系自动检测方法(论文复现)

代码以及视频讲解 本文所涉及所有资源均在传知代码平台可获取 概述 本文复现论文 Hearst patterns revisited: Automatic hypernym detection from large text corpora[1] 提出的文本中上位词检测方法。 在自然语言处理中,上下位关系(Is-a Relations…

单链表的应用(附代码)

链表 链表是⼀种物理存储结构上⾮连续、⾮顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。其实链表可以想象为小火车,链表比顺序表具有更好的灵活性,只需要通过指针的改变就可以实现增删查改。 这是逻辑思维下链表的样…

使用TensorRT对YOLOv8模型进行加速推理

这里使用GitHub上shouxieai的 infer框架 对YOLOv8模型进行加速推理,操作过程如下所示: 1.配置环境,依赖项,包括: (1).CUDA: 11.8 (2).cuDNN: 8.7.0 (3).TensorRT: 8.5.3.1 (4).ONNX: 1.16.0 (5).OpenCV: 4.10.0 2.clon…

redis:Linux安装redis,redis常用的数据类型及相关命令

1. 什么是NoSQL nosql[not only sql]不仅仅是sql。所有非关系型数据库的统称。除去关系型数据库之外的都是非关系数据库。 1.1为什么使用NoSQL ​ NoSQL数据库相较于传统关系型数据库具有灵活性、可扩展性和高性能等优势,适合处理非结构化和半结构化数据&#xff0c…

服务运营|摘要:INFORMS 近期收益管理(Revenue Management )相关文章

编者按: 本期涵盖了INFORMS与收益管理相关的文章及其基本信息。 Title: Online Learning for Constrained Assortment Optimization Under Markov Chain Choice Model 基于马尔可夫链选择模型的约束下选品优化的在线学习 Link: https://pubsonline.informs.org/do…

召唤生命,阻止轻生——《生命门外》

本书的目的,就是阻止自杀!拉回那些深陷在这样的思维当中正在挣扎犹豫的人,提醒他们珍爱生命,让更多的人,尤其是年轻人从执迷不悟的犹豫徘徊中幡然醒悟,回归正常的生活。 网络上抱孩子跳桥轻生的母亲&#…

Linux中gdb调试器的使用

Linux调试器:gdb gdb简介基本使用和常见的指令断点相关运行相关命令 gdb简介 我们都知道一个程序一般有两个版本分别是debug,和release版本,后者就是发布给用户的版本,而前者就是我们程序员用来调试用的版本。 他们有什么区别呢&…

Docker搭建Mysql主从复制,最新,最详细

Docker搭建Mysql主从复制,最新,最详细 这次搭建Mysql主从复制的时候,遇到不少问题,所以本次重新记录一下,使用Docker搭建一主三从的Mysql 一、Docker-Compose创建4个Mysql容器 1.1 创建对应的映射文件夹和对应的配置…

GitLab的安装步骤与代码拉取上传操作

一、GitLab的安装 详情见如下博客链接:gitlab安装 二、GitLab配置ssh key (1)打开Git Bash终端生成SSH和添加步骤 1、全局配置git用户名 git config --global user.name "xxx"注意:xxx为你自己gitlab的名字 2、全局…

JavaScript递归菜单栏

HTML就一个div大框架 <div class"treemenu"></div> 重中之重的JavaScript部分他来啦&#xff01; 注释也很清楚哟家人们&#xff01; let data; let arr []; let cons;let xhr new XMLHttpRequest(); // 设置请求方式和请求地址 xhr.open(get, ./js…

Linux上如何分析进程内存分配,优化进程内存占用大小

云计算场景下,服务器上内存宝贵,只有尽可能让服务器上服务进程占用更少的内存,方才可以提供更多的内存给虚拟机,卖给云客户。 虚拟化三大件:libvirt、qemu、kvm内存开销不小,可以优化占用更少的内存。如何找到进程内存开销的地方直观重要,以qemu为例说明。 一、查看进…

别让不专业的HR逼走你的人才!人力资源管理应该遵循哪些原则?

优秀的HR能够带领整个人力资源部门为企业招揽人才、培养人才和留住人才&#xff0c;促使人才为企业的业务增长提供支持。而不专业的HR&#xff0c;不仅无法做到这些&#xff0c;还会把企业原有的人才逼走&#xff0c;因为不合适的人力管理也是导致人才离职的原因。所以&#xf…

【C++】前缀和算法专题

目录 介绍 【模版】一维前缀和 算法思路&#xff1a; 代码实现 【模版】二维前缀和 算法思路 代码实现 寻找数组中心的下标 算法思路 代码实现 总结 除自身以外数组的乘积 算法思路 代码实现 和为K的子数组 算法思路 代码实现 和可被整除的K的子数组 算法思…

C++ 操作Git仓库

代码 #include "common.h" #include "args.c" #include "common.c"enum index_mode {INDEX_NONE,INDEX_ADD };struct index_options {int dry_run;int verbose;git_repository* repo;enum index_mode mode;int add_update; };/* Forward declar…

Python零基础详细入门教程

Python零基础详细入门教程可以从以下几个方面展开&#xff0c;帮助初学者系统地学习Python编程&#xff1a; 一、Python基础入门 1. Python简介 Python的由来与发展&#xff1a;Python是一种广泛使用的高级编程语言&#xff0c;以其简洁的语法和强大的功能而受到开发者的喜爱…

2024第二十届中国国际粮油产品及设备技术展示交易会

2024第二十届中国国际粮油产品及设备技术展示交易会 时间&#xff1a;2024年11月15-17日 地点&#xff1a; 南昌绿地国际博览中心 展会介绍&#xff1a; 随着国家逐年加大对农业的投入&#xff0c;调整农业产业结构&#xff0c;提高农产品附加值&#xff0c;促进农民增收。…

CRMEB-众邦科技 使用笔记

1.启动项目报错 Unable to load authentication plugin ‘caching_sha2_password’. 参考&#xff1a;http://t.csdnimg.cn/5EqaE 解决办法&#xff1a;升级mysql驱动 <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</ar…

超级弱口令检查工具

一、背景 弱口令问题主要源于用户和管理员的安全意识不足&#xff0c;以及为了方便记忆而采用简单易记的密码。这些密码往往仅包含简单的数字和字母&#xff0c;缺乏复杂性和多样性&#xff0c;因此极易被破解。弱口令的存在严重威胁到系统和用户的数据安全&#xff0c;使得攻击…

在局域网中的另一台主机如何访问windows10WSL中的服务

文章目录 1&#xff0c;开启win10 路由功能2&#xff0c;配置转发规则 1&#xff0c;开启win10 路由功能 2&#xff0c;配置转发规则 netsh advfirewall firewall add rule name"Allowing LAN connections" dirin actionallow protocolTCP localport80 netsh interf…