测试左移——代码审计SonarQube 平台搭建

一、sonarqube代码分析技术体系

1、代码分析工具

IDE 辅助功能

  • xcode、android studio
  • 阿里巴巴 java 开发手册 ide 插件支持

独立的静态分析工具

  • spotbugs、findbugs、androidlint、scan-build、Checkstyle、FindSecBugs
  • pmd 阿里巴巴 java 开发手册 pmd 插件

综合性的代码分析平台

  • sonarqube 功能强大,数据分析全面

2、代码分析技术架构

代码静态检查

  • 代码分析:通过分析语法树和源代码,检查代码规范

    • lint 系列 style 系列 pmd
    • antlr
  • 编译器分析:借助于编译器获得代码关系

字节码静态分析

  • 分析 jar、war、dex 等格式的文件,代表工具:findbugs asm

3、语法树分析技术

在这里插入图片描述

4、字节码分析技术 Java 与 Kotlin 源代码

在这里插入图片描述

5、SonarQube

代码质量和安全的领先产品
17种语言的静态代码分析
检测Bug和漏洞
查看安全热点
跟踪代码气味并修复您的技术债务
代码质量度量和历史
CI/CD集成
可扩展,具有50多个社区插件

在这里插入图片描述

6、代码分析主要指标

在这里插入图片描述

7、代码分析细节指标

在这里插入图片描述

8、度量指标总结

可靠性 bugs
可维护性 code smells
安全性 Vulnerabilities Security Hotspots
覆盖率 Coverage Unit Tests
代码重复 Duplications
代码规模 Lines of Code Comments rate
复杂度 Cyclomatic Complexity Cognitive Complexity

在这里插入图片描述

9、独立分析平台使用案例

在这里插入图片描述

10、持续集成使用案例

在这里插入图片描述

11、Sonarqube经典案例分析

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

在这里插入图片描述

目前大部分公司都采用了 sonarqube,它的概念和技术指标已经成为行业事实上的标准

二、代码审计 SonarQube 平台搭建

1、sonarqube 技术架构

在这里插入图片描述

2、正式环境部署

1、创建网络

[root@mylinux1 ~]# docker network create sonarqube
1f22eb6dc8bb5b640a87d74bbc7a9d7f783b3dde0325bffecd74038eb9aebf69

2、创建数据库容器实例

-e POSTGRES_USER=sonarqube:设置数据库用户名
-e POSTGRES_PASSWORD=sonarqube:设置数据库密码
-e PGDATA=/var/lib/postgresql/data/pgdata:指定数据库的位置
-v $PWD/postgresql_data:/var/lib/postgresql/data:把数据映射到当前目录下的postgresql_data中:即使容器销毁了,重新创建一个,数据不会丢

docker run -d \
  --name sonarqube_postgres \
  --network sonarqube \
  -e POSTGRES_USER=sonarqube \
  -e POSTGRES_PASSWORD=sonarqube \
  -e PGDATA=/var/lib/postgresql/data/pgdata \
  -v $PWD/postgresql_data:/var/lib/postgresql/data \
  postgres

3、创建sonarqube容器实例

创建sonarqube容器实例,可以通过-Xms4g -Xmx4g增加下ES的堆内存大小
mac环境需要加 -e SONAR_SEARCH_JAVAADDITIONALOPTS=“-Dbootstrap.system_call_filter=false”

platform linux/x86_64:在mac上需要加这条命令
-e SONARQUBE_JDBC_USERNAME=sonarqube
-e SONARQUBE_JDBC_PASSWORD=sonarqube \:设置数据库的用户名和密码
-v $PWD/sonarqube_data:/opt/sonarqube/data
-v $PWD/sonarqube_extensions:/opt/sonarqube/extensions
-v $PWD/sonarqube_logs:/opt/sonarqube/logs \:宿主机和容器映射

docker run -d  \
  --name sonarqube_hogwarts \
  --platform linux/x86_64 \
  -p 9000:9000 -p 9092:9092 \
  --network sonarqube \
  --user $(id -u):$(id -g) \
  -e SONARQUBE_JDBC_USERNAME=sonarqube \
  -e SONARQUBE_JDBC_PASSWORD=sonarqube \
  -e SONARQUBE_JDBC_URL="jdbc:postgresql://sonarqube_postgres/sonarqube" \
  -e SONAR_SEARCH_JAVAADDITIONALOPTS="-Dbootstrap.system_call_filter=false -Xms1g -Xmx1g" \
  -e SONARQUBE_WEB_JVM_OPTS="-Xms2g -Xmx2g" \
  --ulimit nofile=524288:524288 \
  -v $PWD/sonarqube_data:/opt/sonarqube/data \
  -v $PWD/sonarqube_extensions:/opt/sonarqube/extensions \
  -v $PWD/sonarqube_logs:/opt/sonarqube/logs \
  sonarqube

4、检查容器启动成功

[root@mylinux1 ~]# docker ps
CONTAINER ID   IMAGE                       COMMAND                   CREATED              STATUS              PORTS                                                                                  NAMES
de81187b3504   sonarqube:8.9.2-community   "bin/run.sh bin/sona…"   About a minute ago   Up About a minute   0.0.0.0:9000->9000/tcp, :::9000->9000/tcp, 0.0.0.0:9092->9092/tcp, :::9092->9092/tcp   sonarqube_hogwarts
532e9ed4212d   postgres                    "docker-entrypoint.s…"   9 minutes ago        Up 9 minutes        5432/tcp                                                                               sonarqube_postgres
60ed0289df5b   registry:2                  "/entrypoint.sh /etc…"   4 months ago         Up 42 hours         0.0.0.0:5000->5000/tcp, :::5000->5000/tcp  

5、环境配置

默认账号 admin:admin
生成 token
划分组与用户

登录页面
在这里插入图片描述
首页
在这里插入图片描述
projects:项目列表(大部分项目是自动创建)
issues:发现的问题
rules:制定的规则
quality profiles::定制规则
quality gates:质量门禁
administration:管理

6、环境变量设置

为了方便命令复用,后面命令中可变内容使用环境变量来表示 $SQ_HOST

[root@mylinux1 ~]# SQ_TOKEN=22df457ac0dc32269a36868645490a85a357d44118
[root@mylinux1 ~]# SQ_HOST=http://192.168.22.3:9000

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

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

相关文章

Quartus II安装下载驱动

Quartus II安装下载驱动 安装步骤: (1)安装完quartus后会自带USB-Blaster的驱动程序,因此不用再去网上下载。 (2)右键点脑左下角win,找到设备管理器并进入。 (3)找到…

FFmpeg5.0源码阅读——FFmpeg大体框架

摘要:前一段时间熟悉了下FFmpeg主流程源码实现,对FFmpeg的整体框架有了个大概的认识,因此在此做一个笔记,希望以比较容易理解的文字描述FFmpeg本身的结构,加深对FFmpeg的框架进行梳理加深理解,如果文章中有…

说说构建流批一体准实时数仓

分析&回答 基于 Hive 的离线数仓往往是企业大数据生产系统中不可缺少的一环。Hive 数仓有很高的成熟度和稳定性,但由于它是离线的,延时很大。在一些对延时要求比较高的场景,需要另外搭建基于 Flink 的实时数仓,将链路延时降低…

Linux通信--构建进程通信IPC的方案之共享内存|实现使用共享内存进行serverclient通信

共享内存是最快的IPC形式。一旦这样的内存映射到共享它的进程地址空间,这些进程间数据传递不再涉及到内核,即进程不再通过执行进入内核的系统调用来传递彼此的数据。 目录 一、共享内存的原理 二、使用共享内存 三、共享内存函数 1.shmget(用来创建共…

【kubernetes系列】Calico原理及配置

概述 Calico是针对容器,虚拟机和基于主机的本机工作负载的开源网络和网络安全解决方案。 Calico支持广泛的平台,包括Kubernetes,OpenShift,Docker EE,OpenStack和裸机服务。 Calico在每个计算节点都利用Linux Kernel实…

七牛云OSS存储

前言: 七牛云的存储项目的附件,需要开发一套七牛云的工具类,可以使用该工具类进行七牛云服务器进行文件的上传与下载操作; 七牛云的文档学习: 相关的依赖项的配置: <dependency><groupId>com.amazonaws</groupId><artifactId>aws-java-sdk-s3…

C#关于WebService中File.Exists()处理远程路径的异常记录

目录 前言方案一打开网站对应的程序池的高级设置按下图步骤设置凭据重启网站若方案一未能解决&#xff0c;请继续尝试方案二&#x1f447; 方案二从控制面板进入到 凭据管理器为windows凭据添加凭据点击**Windows凭据**&#xff0c;并点击**添加Windows凭据**键入远程路径的地址…

使用c的标准库函数创建线程

#include <stdio.h> #include <threads.h> #include <time.h>int thrd_proc(void * varg){// 打印10次int times 10;struct timespec ts {1,0}; // 1秒, 0纳秒while(times--){printf("%s\n",(char *)varg);// 每隔1秒,打印一次thrd_sleep(&t…

Revit SDK: ProximityDetection_WallJoinControl 墙相交检测

前言 这个例子介绍了如何使用过滤器以及墙体的位置线来及进行相交检测&#xff0c;包括&#xff1a; 找到和墙相交的柱子找到出入口的障碍物找到墙各个端点接近的墙验证墙和其它墙的交接情况 内容 找到和墙相交的柱子 关键点在于 ElementIntersectsElementFilter 可以用于…

配置环境变量的作用

配置环境变量的作用 一般运行过程&#xff1a;寻找QQ.exe所在的目录&#xff0c;输入QQ.exe配置环境变量&#xff1a;把QQ所在的路径配给操作系统Path&#xff0c; 在任何路径下都能运行QQ.exe 举例&#xff1a; 定义变量&#xff1a;SCALA_HOME SCALA_HOME、JAVA_HOME 等这…

Python面试:什么是GIL

1. GIL (Global Interpreter lock)可以避免多个线程同时执行字节码。 import threadinglock threading.Lock()n [0]def foo():with lock:n[0] n[0] 1n[0] n[0] 1threads [] for i in range(5000):t threading.Thread(targetfoo)threads.append(t)for t in threads:t.s…

机器连接和边缘计算

以一种高效、可扩展的方式进行连接和边缘计算的结合&#xff0c;解决了在工业物联网应用中的机器数据集成问题。 一 边缘计算 边缘计算描述了由中央平台管理的数据分散式处理&#xff0c;它对于工业物联网而言非常重要。在许多应用程序中&#xff0c;由于数据量非常大&#xf…

修改linux中tomcat的端口

随便修改一个 以8055为例子 开放8081端口 firewall-cmd --permanent --add-port8081/tcp firewall-cmd --reload firewall-cmd --list-all

Java 并发编程

Java 并发编程 一、线程创建1.继承 Thread 类2.实现 Runnable 接口3.实现 Callable 接口 二、线程方法三、线程同步1.同步代码块2.同步方法3.ReentrantLock4.乐观锁 四、线程池1.ThreadPoolExecutor2.Executors 一、线程创建 1.继承 Thread 类 通过继承 Thread 类来创建线程是…

【高性能计算】opencl语法及相关概念(三)事件,内存

opencl中的事件概念 当谈到OpenCL中的事件时&#xff0c;它们代表了执行的各个阶段或操作的状态信息。通过使用事件&#xff0c;您可以跟踪和管理内核执行以及内存操作的进度和顺序。以下是与OpenCL事件相关的关键概念&#xff1a; 创建事件&#xff1a;您可以使用clCreateUse…

Java运行时jar时终端输出的中文日志是乱码

运行Jar时在控制台输出的中文日志全是乱码&#xff0c;这是因为cmd/bash默认的编码是GBK&#xff0c;只要把cmd的编码改成UTF-8即可 两种方式修改&#xff1a;临时修改和注册表永久修改 临时修改 只对当前的cmd页面有效&#xff0c;关闭后重新打开都会恢复成GBK, 打开cmd&am…

记一次对链接、COMMON块、多重符号定义的理解

问题引入 首先是两个测试程序 // foo.c long long int a;// bar.c #include <stdio.h>int a; int main(){a 1;long long int len sizeof(a);printf("%lld\n", len);return 0; }将两个程序链接到一起 问题&#xff1a;len等于几&#xff1f; 初步分析 环境…

研磨设计模式day15策略模式

场景 问题描述 经常会有这样的需要&#xff0c;在不同的时候&#xff0c;要使用不同的计算方式。 解决方案 策略模式 定义&#xff1a; 解决思路&#xff1a;

PyCharm软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 PyCharm是一种集成开发环境&#xff08;IDE&#xff09;&#xff0c;专门为Python开发者设计。它是由捷克软件公司JetBrains开发的&#xff0c;为Python开发人员提供了高效、易用和功能丰富的工具集。 以下是PyCharm软件的主要…

基于 Docker 的 MySQL 主从复制搭建(Mac M1版本)

系统&#xff1a;Macbook M1 镜像版本&#xff1a;mysql:5.7 如果是要查 slave连接不上 master的问题&#xff0c;可以直接跳到文章末尾踩坑处 准备工作 拉取镜像 docker pull mysql:5.7本地数据卷挂载 因为mysql不挂载的话&#xff0c;重启丢失数据&#xff0c;所以在本地创…