代码审计平台sonarqube的安装及使用

docker搭建代码审计平台sonarqube

      • 一、代码审计关注的质量指标
      • 二、静态分析技术分类
      • 三、使用sonarqube的目的
      • 四、sonarqube流程
      • 五、docker快速搭建sonarqube
      • 六、sonarqube scanner的安装和使用
      • 七、sonarqube对maven项目进行分析
      • 八、sonarqube分析报告解析
      • 九、代码扫描规则定制
      • 十、sonarqube api的使用
      • 十一、单元测试与代码覆盖率实战

一、代码审计关注的质量指标

  • 代码坏味道
    • 代码规范
    • 技术债评估
  • bug和漏洞
  • 代码重复度
  • 单测与集成
    • 测试用例数量
    • 覆盖率

二、静态分析技术分类

  • 代码静态检查
    • 代码分析:lint系列,通过分析语法树和源代码,检查代码规范
    • 编译器分析:借助于编译器获得代码关系
  • 字节码静态分析
    • 分析jar、war、dex等格式的文件,代表工具:fndbugs

三、使用sonarqube的目的

sonarqube目前我们着重关注一些高优先级别的bug,特别是新增代码导致的新的bug和漏洞,比如因为安全规范没遵守导致潜在漏洞发生。还有就是看覆盖率和单元测试的case数量,以及引用覆盖率去度量产品测试是否充分。

四、sonarqube流程

在这里插入图片描述

五、docker快速搭建sonarqube

db_instance=postgres_prod
sonarqube_instance=sonarqube_prod
data_dir=/root/sonarqube
#创建数据目录
mkdir -p $data_dir
mkdir $data_dir/postgresql
mkdir $data_dir/sonarqube_data
mkdir $data_dir/sonarqube_extensions
mkdir $data_dir/sonarqube_logs
chmod -R 777 $data_dir

#创建网络
docker network create sonarqube
#启动pg数据库
docker run -d \
    --name $db_instance \
    --network sonarqube \
    -p 5432:5432 \
    -e POSTGRES_USER=sonarqube \
    -e POSTGRES_PASSWORD=sonarqube \
    -e PGDATA=/var/lib/postgresql/data/pgdata \
    -v $data_dir/postgresql:/var/lib/postgresql/data \
    postgres

sysctl -w vm.max_map_count=524288
sysctl -w fs.file-max=131072
ulimit -n 131072
ulimit -u 8192

#启动soarqube的产品部署
docker run -d \
    --name $sonarqube_instance \
    --network sonarqube \
    -p 9000:9000 -p 9092:9092 \
    -e SONARQUBE_JDBC_USERNAME=sonarqube \
    -e SONARQUBE_JDBC_PASSWORD=sonarqube \
    -e SONARQUBE_JDBC_URL="jdbc:postgresql://$db_instance/sonarqube" \
    -v $data_dir/sonarqube_data:/opt/sonarqube/data \
    -v $data_dir/sonarqube_extensions:/opt/sonarqube/extensions \
    -v $data_dir/sonarqube_logs:/opt/sonarqube/logs \
    sonarqube
    docker start sonarqube_prod
  • 查看日志:docker logs -f sonarqube_prod
  • 搭建完成后网页输入http://ip:9000/访问,默认用户名密码是admin,进入以后可以改密码,首页长这样
    在这里插入图片描述
  • 页面介绍:
    • project:项目tab,可以在里面创建一个项目
    • issues:报告出来的问题
    • rules:系统总共有多少规则需要配置
    • quality profiles:包含了一系列rules的配置文件,用于代码分析
    • quality gates:类似断言
    • administration:管理员面板
  • 安装插件
    • java常用插件有Checkstyle,Findbugs,PMD,SonarJS,SonarJava(后面这3个我找不到了,不知道是不是我版本太高了哈哈)
      在这里插入图片描述
  • 我们可以在/root/sonarqube/sonarqube_extensions/downloads查看到下载内容
    在这里插入图片描述
  • 下载完记得要重启
    在这里插入图片描述

六、sonarqube scanner的安装和使用

PS:我这边下的是sonar的v10.5.1 版本,要搭配java17使用,大家要提前配好环境变量哦~

  • 安装scanner并配置环境变量。
# 下载
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli
/sonar-scanner-cli-5.0.1.3006-linux.zip
# 解压
yum -y install unzip
unzip sonar-scanner-5.0.1.3006-linux
# 修改conf配置的全局变量,改成自己的sonarqube地址,还有login密码并保存
cd sonar-scanner-5.0.1.3006-linux/
vim conf/sonar-scanner.properties 

在这里插入图片描述
在这里插入图片描述

# 配置环境变量
vim /etc/profile
# 添加上
SONARSCANNER_HOME=/root/sonarqube/sonarqube_extensions/downloads/sonar-scanner-5.0.1.3006-linux PATH=$PATH:$SONARSCANNER_HOME/bin
export SONARSCANNER_HOME PATH
# 使其生效
source /etc/profile
# 检查sonarscanner是否配置成功:
sonar-scanner -h

在这里插入图片描述

  • 使用sonar-scanner分析基础项目
# 下载sonar官方案例
git clone git@gitee.com:TheOctopus/sonar-scanning-examples.git
# 切换路径
cd sonar-scanning-examples
# 修改properties配置文件的前三个参数,projectVersion可以改成与项目一致的版本号并保存
cd /root/sonar-scanning-examples/sonarqube-scanner
vim sonar-project.properties

在这里插入图片描述

  • 输入sonar-scanner命令进行分析(这里也要注意下,记得是在sonar-project.properties所在文件夹执行命令,否则又要报错啦哈哈哈)
    在这里插入图片描述

七、sonarqube对maven项目进行分析

PS:maven的环境变量大家记得先配

  • 首先,我们需要在页面新建一个项目:projects-create project-输入name,key-点击next
    在这里插入图片描述
  • create project
    在这里插入图片描述
  • 分析方式选择,我这边选择locally
    在这里插入图片描述
  • 点击generate生成秘钥-点击continue
    在这里插入图片描述
  • 选择maven,然后复制里面的语句,进入项目里,在pom文件所在文件夹执行命令(图片里的key和name对不上是因为上面的项目忘记截图了,重新创建了一个。。)
    在这里插入图片描述
    在这里插入图片描述
    结果可以在这里看,也可以直接在sonarqube的页面看,都有的
    在这里插入图片描述
    在这里插入图片描述
    还有另外一种方式,就是通过配置maven的setting.xml文件,然后运行的时候只需要执行mvn clean verify sonar:sonar即可,替你们试过了太麻烦了而且不灵活,不推荐!
<!--demo-->
<settings>
    <pluginGroups>
        <pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
    </pluginGroups>
    <profiles>
        <profile>
            <id>sonar</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <!-- Optional URL to server. Default value is http://localhost:9000 -->
                <sonar.host.url>
                  http://myserver:9000
                </sonar.host.url>
            </properties>
        </profile>
     </profiles>
</settings>

在这里插入图片描述

在这里插入图片描述

八、sonarqube分析报告解析

在这里插入图片描述

  • overview
    Quality Gate Status:整体是否通过
    Security:安全性。底下的H、M、L分别代表高中低
    Reliability:可靠性
    Maintainability:可维护性
    Accepted issues:那些已经被分析人员或团队成员接受并认为不需要进一步处理的问题
    Coverage:覆盖率
    Duplications:重复
    Security Hotspots:代码中存在安全问题的部分,它可以帮助安全分析师确定代码是否存在漏洞

  • Issues栏:bug记录
    在这里插入图片描述
    点进去可以看到bug详情和解决方案
    在这里插入图片描述
    我们可以重点关注这里
    在这里插入图片描述

  • measures栏
    可以理解成质量模型
    在这里插入图片描述
    可以点进去查看详情
    在这里插入图片描述

  • new code 新增代码的覆盖率

    • sonar可以很智能的分析新增代码的变更。怎么定义新增呢?比如和上次的代码发生了偏差,都认为是新增的
      在这里插入图片描述

九、代码扫描规则定制

sonarqube默认自带了很多扫描的规则,但是有的规则在实际项目里用不到,我们如何自定义规则呢?

  • 进入rules里,这里可以看到自带的规则,然后我们可以进行过滤,比如把优先级是低级中级的先过滤,这样报告才能突出重点,更加简洁明确。比如代码重复度,这个一旦爆出就表示代码一定哪些地方写重复了,还有一些高优先级的bug和漏洞。对于code smell,低级别的bug之类的可以尽量弱化。
  • 比如我们只要高优先级的,可以筛出来,然后保存成配置文件然后导入即可
    在这里插入图片描述
  • 建议把报告直接给研发去看,我们QA完全不管。还有就是我们有专门团队去看扫描的问题,然后帮助研发去解决。研发有时候也看不懂,他们会构造对应场景,告诉研发危害是什么。对于偏业务测试的团队,还是建议不要去提这类的bug,会耗费大量精力,这个比较适合专门的团队去跟进这些问题。
  • 一些规则的定制建议由专门的团队去负责

十、sonarqube api的使用

  • 要让gitlab、jenkins去访问sonarqube,包括我们写测试平台的时候,我们有时候需要从sonarqube提取数据,需要对外提供api。

  • 访问api文档:右下角点击web api在这里插入图片描述
    就可以看到具体的了,这些指标也是对应我们上面的一些功能
    在这里插入图片描述

  • web hook功能使用

    • 当sonar分析完一个项目的时候,jenkins希望得到通知,我们就可以使用web hook功能
    • 如何配置?
      进入administration-configuration-webhooks-create,输入如下参数进行配置
      在这里插入图片描述

    在这里插入图片描述

    十一、单元测试与代码覆盖率实战

    • 相关文档:https://docs.sonarsource.com/sonarqube/latest/analyzing-source-code/test-coverage/test-coverage-parameters/

    • 无侵入快速覆盖率统计

      • 1、进入项目,执行该脚本
// 启动注入并对代码进行染色,执行单元测试,生成覆盖率报告
  mvn clean \
  org.jacoco:jacoco-maven-plugin:0.8.6:prepare-agent \
  test \
  org.jacoco:jacoco-maven-plugin:0.8.6:report\
  -Dmaven.test.failure.ignore=true \
  -Dmaven.test.skip=false
  • 得到结果

在这里插入图片描述

  • 跑完以后会生成exec结尾的报告
    在这里插入图片描述

  • 把它转为xml文件:

    • 执行mvn org.jacoco:jacoco-maven-plugin:0.8.6:report
      在这里插入图片描述
    • 查看生成的xml文件
      在这里插入图片描述
    • 利用scanner上传覆盖率数据
find $PWD -name "jacoco.*"

mvn \
  clean \
  org.jacoco:jacoco-maven-plugin:0.8.6:prepare-agent \
  test \
  org.jacoco:jacoco-maven-plugin:0.8.6:report  \
  sonar:sonar  \
  -Dsonar.projectKey=demo   \
  -Dsonar.host.url=http://192.168.10.137:9000/   \
  -Dsonar.token=sqp_2097cdfb11f2c55b87362c34acc660c781e03709  \
  -Dsonar.coverage.jacoco.xmlReportPaths="$PWD/**/**/**/**/jacoco.xml" \
  -Dmaven.test.failure.ignore=true   \
  -Dmaven.test.skip=false

执行完毕
在这里插入图片描述
查看页面,覆盖率有值啦
在这里插入图片描述
在这里插入图片描述
代码修改后,我们重新运行上面的脚本,可以看到new code页有数据了
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用 AI Assistant for Observability 和组织的运行手册增强 SRE 故障排除

作者&#xff1a;Almudena Sanz Oliv, Katrin Freihofner, Tom Grabowski 通过本指南&#xff0c;你的 SRE 团队可以实现增强的警报修复和事件管理。 可观测性 AI 助手可帮助用户使用自然语言界面探索和分析可观测性数据&#xff0c;利用自动函数调用来请求、分析和可视化数据…

【二叉树算法题记录】二叉树的所有路径,路径总和——回溯

目录 257. 二叉树的所有路径题目描述题目分析cpp代码 112. 路径总和题目描述题目分析cpp代码 257. 二叉树的所有路径 题目描述 给你一个二叉树的根节点root &#xff0c;按任意顺序&#xff0c;返回所有从根节点到叶子节点的路径。 题目分析 其实从根节点往下走&#xff0c…

VM虚拟机安装调试(步骤如下图)

VM虚拟机安装调试 随着一顿安装操作&#xff0c;还有enter键敲下&#xff0c;出现如下界面。

从木匠到编程匠的传承

我的父亲在1906年出生于宁波北仑西岙村。年轻时他在老家从木匠学徒做起&#xff0c;学到了一手好技艺。 宁波乡下的老式雕花木床分为三弯、五弯、七弯等三种档次&#xff0c;其中七弯的做工最复杂。父亲说&#xff0c;他是会做七弯木床的。 上世纪三十年代&#xff0c;父亲举…

Spring Cloud Gateway 11种断言工厂

系列文章目录 文章目录 系列文章目录前言前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 Spring Cloud Gateway路由匹配是Spring WebFlux基础功能的一部分,在Spri…

商场综合体能源监管平台,实现能源高效管理

商场作为大型综合体建筑&#xff0c;其能源消耗一直是备受关注的问题。为了有效管理商场能耗&#xff0c;提高商场能源效率&#xff0c;商场综合体能源监管平台应运而生。 商场综合体能源监管平台可通过软硬件一起进行节能监管&#xff0c;硬件设备包括各种传感器、监测仪表和…

设置多用户远程登录windows server2016服务器

1、远程登录windows server 2016 运行—>mstsc—>远程IP地址—>用户和密码 2、远程windows服务器设置多用户策略 运行—>gpedit.msc->计算机配置—管理模板—windows组件—远程桌面服务—远程桌面会话主机----连接,如下图所示: 1、《限制连接的数量》设置为…

前端Vue uView 组件<u-search> 自定义右侧搜索按钮样式

前言 uView 文档的效果不是ui设计的样式 需要重新编辑 原效果 ui设计效果 解决方案 设置里说明的需要传一个样式对象 这个对象 需要写在 script 标签里面 这里需要遵循驼峰命名 比如font-size 改为 fontSize lineHeight和textAlign为水平锤子居中效果 searchStyle: {ba…

手机一键换ip地址到湖南

怎么把手机ip改成湖南&#xff1f;想要手机一键换ip地址到湖南&#xff0c;可以试试使用虎观代理app&#xff0c;一键操作&#xff0c;简单又方便。你会惊讶地发现&#xff0c;更改手机IP至湖南竟然如此便捷。 选用APP优势&#xff1a; ★IP资源丰富 已经在国内各大省份提供服…

Python作业三:扫描目录文件,发送到指定邮箱

问&#xff1a; 作业任务&#xff1a;编写python代码&#xff0c;扫描指定的目录下的所有文件&#xff0c;将这些扫描的文本内容邮件发送到指定邮箱(如&#xff1a;自己的qq邮箱) 发送邮箱&#xff1a;yagmail 以 163 邮箱为例&#xff0c;在编码之前&#xff0c;我们需要开…

C++ 多态 - 下

目录 1. 多态的原理 1.1. 虚函数表 1.2. 多态原理 1.3. 静态绑定和动态绑定 1.3.1. 运行时决议 1.3.2. 编译时决议 1.4. 为什么基类的对象调用虚函数不能构成多态 2. 单继承中的虚函数表 2.1. 同类型对象的虚表 2.2. 单继承的对象的虚表 2.2.1. 内存窗口查看 2.2.2…

Spring底层入门(十)

1、内嵌tomcat boot框架是默认内嵌tomcat的&#xff0c;不需要手动安装和配置外部的 Servlet 容器。 简单的介绍一下tomcat服务器的构成&#xff1a; Catalina&#xff1a; Catalina 是 Tomcat 的核心组件&#xff0c;负责处理 HTTP 请求、响应以及管理 Servlet 生命周期。它包…

QT——tableWidget-跳变之舞V1.0-记录学习【1】

QT——tableWidget-跳变之舞V1.0-记录学习【1】 文章目录 QT——tableWidget-跳变之舞V1.0-记录学习【1】前言一、利用QT创建项目文件1.1 完整项目文件如下图所示:1.2 演示&#xff1a; 二、声明文件&#xff1a;2.1 主界面声明文件:mainwindow.h&#xff1b;2.2 控制窗口声明文…

Python框架Django入门教程

Django 是一个使用 Python 编程语言开发的、免费且开源的 Web 应用框架。它遵循 "DRY&#xff08;Dont Repeat Yourself&#xff09;" 原则&#xff0c;旨在简化创建功能丰富的、高效率的 Web 网站。Django 提供了模型-视图-控制器&#xff08;MVC&#xff09;架构的…

C++ VScode: launch: program ...... dose not exist

VScode: launch: program … dose not exist 介绍 参考VS Code 配置 C/C 编程运行环境&#xff08;保姆级教程&#xff09;教程配置了VSCode。在配置launch.json适用多个.c 文件编译时&#xff0c;弹出下面错误。 原因和解决方法 是task.json 默认配置的问题。 默认的 cwd参…

Git详解之五:分布式Git

为了便于项目中的所有开发者分享代码&#xff0c;我们准备好了一台服务器存放远程 Git 仓库。经过前面几章的学习&#xff0c;我们已经学会了一些基本的本地工作流程中所需用到的命令。接下来&#xff0c;我们要学习下如何利用 Git 来组织和完成分布式工作流程。 特别是&#…

回归预测 | Matlab实现SMA-GPR黏菌算法优化高斯过程回归多变量回归预测

回归预测 | Matlab实现SMA-GPR黏菌算法优化高斯过程回归多变量回归预测 目录 回归预测 | Matlab实现SMA-GPR黏菌算法优化高斯过程回归多变量回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab实现SMA-GPR黏菌算法优化高斯过程回归多变量回归预测 1.Matlab实现…

轻松玩转Python文件操作:移动、删除

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; Python文件操作基础 在处理计算机文件时&#xff0c;经常需要执行如移动和删除等基本操作。Python提供了一些内置的库来帮助完成这些任务&#xff0c;其中最常用的就是os模块和shutil模块。这两个模块包含了许多与文…

李彦宏回顾大模型重构百度这一年

“大模型我们走在最前面&#xff0c;我们需要去勇闯无人区&#xff0c;需要去冒前人没有冒过的风险。”近日&#xff0c;在百度一场内部颁奖活动中&#xff0c;百度创始人、董事长兼首席执行官李彦宏指出&#xff0c;百度一直坚信技术可以改变世界&#xff0c;会一直沿着这条路…

leetcode算法笔记-算法复杂度

对于时间复杂度&#xff0c;主要包括三种情况&#xff1a; 渐进紧确界&#xff1a; O渐进上界&#xff1a; 渐进下界&#xff1a; 加法原则&#xff1a;不同的时间复杂度相加取阶数最高的 乘法原则&#xff1a;不同的时间复杂度相乘&#xff0c;结果为时间复杂度的乘积 阶乘…