当前位置:首页 > 技术分析 > 正文内容

安全防护,静态扫描工具sonarqube介绍

ruisui883个月前 (01-31)技术分析20

安全防护,静态扫描工具sonarqube介绍

一:SonarQube介绍

#官网文档

#https://docs.sonarqube.org/latest/#staying-connected

https://docs.sonarqube.org/latest/setup-and-upgrade/install-the-server/

二:概念

异味 Code smell (maintainability domain)

异味太多了,我也没有消除太多了异味,一个项目异味一般都是好几k,所以消除起来一两个异味对基数没有什么影响,并且异味太多,消除一部分后,并没有感受到那种异味数量巨减的感觉,导致消除异味的积极性不是很高。并且有的异味是真的不好消除,有时候打开一个文件,几千行代码一片都是标异味。直接就放弃了。

代码异味:一种编程术语,指的是代码中的某些特征可能导致潜在的问题,通常需要进行重构以提高代码质量

三:SonarQube架构

1,不遵守代码标准(checkstyle)

2,潜在缺陷(空指针)

3,糟糕的复杂度(难以理解)

4,重复(通用的方法需要归纳封装)

5,糟糕的注释

7,糟糕的设计(耦合度检查)

需要用到的软件有:SonarQube,Sonar-scanner。

SonarQube为代码检查的server,并提供可视化界面;

Sonar-scanner为client。用于收集检查数据并且发送到server中。

也就是传统的C/S关系:


四:与gitlab集成扫描

配置gitlab api

集成gitlab:

通过git-runner执行脚本gitlab-ci.yml。当任意同事代码提交时直接触发gitlab-ci.yml。

gitlab-ci.yml触发sonarQube代码检查脚本比如:进入项目文件夹 ——> 执行指令:sonar-scanner


五:与jenkins集成

集成Jenkins:

在jenkins服务器上安装客户端Sonar-Scanner并配置好环境变量。

当jenkins自动部署项目完成之后触发逻辑:进入项目文件夹 ——> 执行指令:sonar-scanner

进入 Jenkins ,系统管理——> 系统配置 ——> 找到 Sonar ——> 追加配置——> 添加凭据

注:Secret 在SonarQube里面 “生成令牌”

六:安装部署

#ubuntu 2204

1.docker-compose 组件部署

创建网络

docker network create sonarnet

docker network ls

2.下载镜像

docker pull postgres:12

docker pull sonarqube:community

3.创建目录

mkdir -p /data/sonarqube/{conf,data,logs,extensions}

mkdir -p /data/postgres/{postgresql,data}

chmod -R 777 /data/sonarqube

4.编写配置文件

conf/sonar.properties

sonar.jdbc.username=sonar
sonar.jdbc.password=sonar123
sonar.jdbc.url=jdbc:postgresql://postgres:5432/sonar

5.中文汉化补丁

下载:
https://github.com/xuhuisheng/sonar-l10n-zh/releases/download/sonar-l10n-zh-plugin-10.0/sonar-l10n-zh-plugin-10.0.jar

上传到:extensions/plugins/

6.配置docker-compose.yaml

#如果文件名称不一样 docker-compose -f sonar-docker-compose.yml up -d

docker-compose.yml


version: '3'
services:
  postgres:
    image: postgres:12
    restart: always
    container_name: postgres
    ports:
      - 5432:5432
    volumes:
      - /data/postgres/postgresql/:/var/lib/postgresql
      - /data/postgres/data/:/var/lib/postgresql/data
    environment:
      TZ: Asia/Shanghai
      POSTGRES_USER: sonar
      POSTGRES_PASSWORD: sonar123
      POSTGRES_DB: sonar
    networks:
      - sonarnet
  sonar:
    image: sonarqube:community
    restart: always
    container_name: sonar
    depends_on:
     - postgres
    volumes:
     - /data/sonarqube/extensions:/opt/sonarqube/extensions
     - /data/sonarqube/logs:/opt/sonarqube/logs
     - /data/sonarqube/data:/opt/sonarqube/data
     - /data/sonarqube/conf:/opt/sonarqube/conf
    ports:
     - 9000:9000
    environment:
      SONARQUBE_JDBC_USERNAME: sonar
      SONARQUBE_JDBC_PASSWORD: sonar123
      SONARQUBE_JDBC_URL: jdbc:postgresql://postgres:5432/sonar
    networks:
     - sonarnet
networks:
   sonarnet:
     driver: bridge

7.启动服务

docker-compose up -d

#停止

docker-compose down

#重启

docker-compose restart sonar


8.默认访问账号密码

http://192.168.10.14:9000/

admin

admin

9.修改web服务配置

方法1:

Web服务默认的端口号是9000

sonar.web.port=9003

方法2:部署nginx

配置域名

七:Sonar-scanner客户端

sonar-scanner提供本地的代码扫描,客户端可以安装在与服务端相同的服务器,也可以装在不同的服务器(也可以安装在开发人员本地电脑)

1.下载

使用浏览器打开刚刚安装好的SonarQube Web UI,新建project时根据指引,可以找到对应OS的sonar-scanner客户端下载地址以及使用命令

https://docs.sonarqube.org/10.0/analyzing-source-code/scanners/sonarscanner/

#scanner client

集成Jenkins:
       在jenkins服务器上安装客户端Sonar-Scanner并配置好环境变量。
       当jenkins自动部署项目完成之后触发逻辑:进入项目文件夹 ——> 执行指令:sonar-scanner

集成gitlab:
       通过git-runner执行脚本gitlab-ci.yml。当任意同事代码提交时直接触发gitlab-ci.yml。
       gitlab-ci.yml触发sonarQube代码检查脚本比如:进入项目文件夹 ——> 执行指令:sonar-scanner


#执行 SonarQube 分析非常简单

sonar-scanner

-Dsonar.projectKey=go-gateway

-Dsonar.sources=.

-Dsonar.host.url=http://192.168.10.14:9000

-Dsonar.token=sqp_8aad21f2cdc5c5985c634f05a1120e001ccce35a

2.二进制方式

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

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

cd sonar-scanner-4.8.0.2856-linux/conf

vi sonar-scanner.properties

# 打开下面两项配置
sonar.host.url=http://localhost:9000 # 因为是在本地,不用修改了
sonar.sourceEncoding=UTF-8
 
# 并添加两行,写上登录SonarQube Web UI的账号密码
sonar.login=youraccount
sonar.password=yourpassword

3.配置环境变量

修改环境变量(下面的步骤使用root账号操作)

vi /etc/profile

在最下面添加一行并保存

export PATH="$PATH:/data/sonar-client/sonar-scanner-4.8.0.2856-linux/bin"

使配置生效

source /etc/profile

环境变量设置成功,可以在服务器的任何地方执行sonar-scanner命令了

sonar-scanner -v


4.代码扫描

a.从gitlab仓库拉取代码到服务器(实际使用中,按测试要求拉取对应tag的代码)

#git clone -b dev https://mengsy:Meng%40@gitlab.meta.com/backend/cpp-world.git

git clone -b dev https://mengsy:Meng%40@gitlab.meta.com/backend/go-gateway.git

b.添加扫描配置文件sonar-project.properties

进入项目代码的工程目录,在根目录下面新建一个配置文件sonar-project.properties

sonar-project.properties

# cd go-gateway/
# touch sonar-project.properties
 
# 写入如下的内容
# must be unique in a given SonarQube instance
sonar.projectKey=go-gateway
 
# --- optional properties ---
# defaults to project key
sonar.projectName=go-gateway      # 修改成实际项目名称
 
# defaults to 'not provided'
sonar.projectVersion=dev-1.0    # 修改成代码实际的版本号
 
# Path is relative to the sonar-project.properties file. Defaults to .
sonar.sources=.
 
# Encoding of the source code. Default is default system encoding
sonar.sourceEncoding=UTF-8

c.执行扫描

sonar-scanner

#ERROR: Error when running: 'node -v'. Is Node.js available during analysis?

d.查看结果

http://192.168.10.14:9000/projects



扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/613.html

分享给朋友:

“安全防护,静态扫描工具sonarqube介绍” 的相关文章

你感动了吗?佳能超规格镜头 RF 24-105mm F2.8深度测评

如果要你选一支用作多题材创作的挂机镜头,那我相信很多人会选择24-105mm这个焦段的镜头。作为一支可以实现从广角到长焦的变焦镜头,24-105mm有着丰富的焦段选择。只是基于镜头体积以及光学结构上的限制,此前的24-105mm镜头只能恒定在F4的光圈。而佳能打破了这一限制,将实用焦段和恒定光圈完美...

12种JavaScript中最常用的数组操作整理汇总

数组是最常见的数据结构之一,我们需要绝对自信地使用它。在这里,我将列出 JavaScript 中最重要的几个数组常用操作片段,包括数组长度、替换元素、去重以及许多其他内容。1、数组长度大多数人都知道可以像这样得到数组的长度:const arr = [1, 2, 3]; console.log(a...

一文让你彻底搞懂 vue-Router

路由是网络工程里面的专业术语,就是通过互联把信息从源地址传输到目的地址的活动。本质上就是一种对应关系。分为前端路由和后端路由。后端路由:URL 的请求地址与服务器上的资源对应,根据不同的请求地址返回不同的资源。前端路由:在单页面应用中,根据用户触发的事件,改变URL在不刷新页面的前提下,改变显示内容...

三勾知识付费(PHP+vue3)微信小程序平台+SAAS+前后端源码

项目介绍三勾小程序商城基于thinkphp8+element-plus+uniapp打造的面向开发的小程序商城,方便二次开发或直接使用,可发布到多端,包括微信小程序、微信公众号、QQ小程序、支付宝小程序、字节跳动小程序、百度小程序、android端、ios端。软件架构后端:thinkphp8 管理端...

一篇文章搞懂同步与异步、阻塞与非阻塞

要想掌握好Java NIO需要涉及了解同步与异步、阻塞与非阻塞,本文通过相关例子让你深入理解其本质@mikechen阻塞阻塞与非阻塞是对同一个线程来说的,在某个时刻,线程要么处于阻塞,要么处于非阻塞。阻塞调用是指调用结果返回之前,当前线程会被挂起,调用线程只有在得到结果之后才会返回。举一个例子:当一...

异步电动机和同步电动机有什么区别?

有很多电工朋友在日常工作当中,会遇到很多种不同类型的电动机,比如直流电机、高低压交流电机、步进电机和伺服电机等等。其中交流电机还可以分为异步电动机和同步电动机两种,那么同步电动机和异步电动机到底有什么区别呢?下面就为大家简单的介绍一下:一、转速的区别:看这个题目就能知道,它们最大的区别就在于“同步和...