jenkins+ SonarQube(代码质量测试)从gitlab拉取若依代码进行检测

一、SonarQube 概述

1、简介

SonarQube支持多种开发语言,包括但不限于Java、Python、PHP、JavaScript、CSS、C、C++、Go等,可以检测出重复代码、代码漏洞、代码规范和安全性漏洞等问题。其检测范围涵盖了从细微的样式选择到设计错误等多个方面,可以确保代码可靠性,减少技术债务。

SonarQube具有多种功能特性,例如能够结合静态和动态分析工具,持续扫描项目的代码质量;与用户的开发工作流程集成,实现跨项目分支和拉取请求的持续代码检查;提供项目代码质量报告,使开发人员能够更清楚地了解代码的健康状况。

SonarQube可以与多种软件整合进行代码扫描,如Maven、Gradle、Git、Jenkins等,并且会将代码检测结果推送回SonarQube,并在系统提供的UI界面上显示出来。这使得SonarQube成为了一个跨平台、跨语言的代码质量管理工具,能够满足多种场景下的代码质量管理需求。

sonarqube是一个自我管理的自动代码管理工具,SonarQube 是一个开源的代码分析平台, 用来持续分析和评测项目源代码的质量。 通过SonarQube我们可以检测出项目中重复代码,潜在bug,代码规范,安全性漏洞等问题,并通过SonarQube web UI展示出来。

2、组件

SonarQube主要由四个核心组件组成,它们共同协作以实现代码质量管理。

1、SonarQube服务器:这是SonarQube系统的核心,负责管理代码质量管理流程。它接收来自SonarScanner的数据,处理这些分析结果,并将它们存储在数据库中。此外,SonarQube服务器还提供Web界面,用于配置、管理和查看代码质量报告。开发人员可以通过Web界面浏览查看代码分析结果,进行相应的配置。计算引擎服务器则主要处理代码分析报表,并将这些数据存储在数据库中。

2、SonarQube数据库:这个数据库用于存储SonarQube服务器生成的所有数据。这些数据包括项目元数据、代码质量度量、检测到的问题等。

3、SonarScanner:这是与开发环境接口的工具,负责执行代码的静态分析。它从源代码管理系统中获取代码,根据预定义的规则和标准对代码进行分析,然后将分析结果发送给SonarQube服务器。SonarScanner可以单独部署,也可以集成在如Maven、Gradle等构建工具中。

4、多个Sonar插件:SonarQube通过插件来扩展其核心功能,以支持更多种类的编程语言和代码分析规则。这些插件包括分析各种语言的插件,可以根据项目的需求进行选择和配置。

其基本架构图如下:

 

sonarqube server上主要有3个应用:

Web服务:为SonarQube用户界面提供服务的。

搜索服务:基于 Elasticsearch 器。

计算引擎:负责处理代码分析报告并将其保存在SonarQube数据库中。

3、sonarQube的作用

  1. 代码质量和安全扫描和分析平台。
  2. 多维度分析代码:代码量、安全隐患、编写规范隐患、重复度、复杂度、代码增量、测试覆盖率等。
  3. 支持25+编程语言的代码扫描和分析,包含java\python\C#\javascript\go\C++等。
  4. 涵盖了编程语言的静态扫描规则: 代码编写规范+安全规范。
  5. 能够与代码编辑器、CI/CD平台完美集成。
  6. 能够与SCM集成,可以直接在平台上看到代码问题是由哪位开发人员提交。
  7. 帮助程序猿写出更干净、更安全的代码。

SonarQube 可以从以下七个维度检测代码质量,而作为开发人员至少需要处理前5种代码质量问题。

(1)不遵循代码标准:sonar 可以通过 PMD、CheckStyle、Findbugs 等知名的静态代码规则分析工具规范代码编写。

(2)潜在的缺陷:sonar 可以通过 PMD、CheckStyle、Findbugs 等知名的静态代码规则分析工具检测出潜在的缺陷。

(3)糟糕的复杂度分布:文件、类、方法等,如果复杂度过高将难以改变,这会使得开发人员难以理解它们,且如果没有自动化的单元测试,对于程序中的任何组件的改变都将可能导致需要全面的回归测试。

(4)重复:显然程序中包含大量复制粘贴的代码是质量低下的,sonar 可以展示源码中重复严重的地方。

(5)注释不足或者过多:没有注释将使代码可读性变差,特别是当不可避免地出现人员变动时,程序的可读性将大幅下降,而过多的注释又会使得开发人员将精力过多地花费在阅读注释上,亦违背初衷。

(6)缺乏单元测试:sonar可以很方便地统计并展示单元测试覆盖率。

(7)糟糕的设计:通过sonar可以找出循环,展示包与包、类与类之间的相互依赖关系,可以检测自定义的架构规则,通过sonar可以管理第三方的jar包,可以利用LCOM4检测单个任务规则的应用情况,检测耦合。

      另外 SonarQube 也可以生成详细的代码分析质量报告,并通过强大的仪表盘展示出来,使我们能够根据角色的不同,查看不同维度的度量标准。

4、工作原理

sonar静态代码扫描由2部分组成:sonarQube平台,sonar-scanner扫描器。

sonarQube: web界面管理平台。

 1)展示所有的项目代码的质量数据。

 2)配置质量规则、管理项目、配置通知、配置SCM等。

sonarScanner: 代码扫描工具

   专门用来扫描和分析项目代码。支持20+语言。

   代码扫描和分析完成之后,会将扫描结果存储到数据库当中,在sonarQube平台可以看到扫描数据。

sonarQube和sonarScanner之间的关系:

5、工作流程

工作流程介绍

1.开发人员在IDE中开发和合并代码,并将代码签入到DevOps平台。

2.持续集成工具(如jenkins)检查、构建和运行单元测试,集成SonarQube扫描仪分析结果。

3.扫描程序将结果发布到SonarQube服务器,该服务器通过SonarQube界面、电子邮件、IDE内通知(通过SonarLint)和拉入或合并请求的装饰(使用Developer Edition及更高版本时)向开发人员提供反馈。

6、Sonar的优点:

(1)支持所有语言的检测。一个工具,搞定所有。

(2)灵活扩展,插拔式使用。自定义的代码检测规则,可自定义插件,独立打成JAR包放到SONARQUBE插件目录下,重启即生效,开发使用非常方便。而且自带UT验证框架,开发效率高。

(3)规则支持多租户隔离。租户可定制自己的规则集。

(4)生态强大,业界有诸多插件,与jenkins友好集成。

(5)部署使用便捷。

(6)架构松耦合,通过与maven/jenkins等集成,将代码扫描的计算消耗迁移到业务或者构建方的资源上,极大的提升了自身的吞吐能力。

7、衡量代码质量的几个指标

1.Bugs Bug是出现了明显错误或是高度近似期望之外行为的代码。

2.漏洞 漏洞是指代码中可能出现被黑客利用的潜在风险点。

3.安全热点 安全敏感代码需要手工审核,以便判断是否存在安全漏洞。

4.异味 代码异味会困扰代码的维护者并降低他们的开发效率。主要的衡量标准是修复它们所需的时间。

5.重复率 新代码中的重复行密度 (%),重复行数,重复代码块

6.行数 程序中代码的行数

二、拓扑

三、安装postgresql

#从 SonarQube 8.2 开始,官方不再支持 MySQL 数据库,因此这里使用postgresql数据库

官方下载 PostgreSQL: File Browser 本文我用的14版本

1、上传或下载软件包

[root@ligc_227 ~]# wget --no-check-certificate  https://ftp.postgresql.org/pub/source/v14.6/postgresql-14.6.tar.gz

2、安装依赖包

[root@ligc_227 ~]# yum install -y perl-ExtUtils-Embed readline-devel zlib-devel pam-devel libxml2-devel libxslt-devel openldap-devel python-devel gcc-c++ openssl-devel cmake

3、解压并进入目录

[root@ligc_227 ~]# tar -zxf postgresql-14.6.tar.gz

[root@ligc_227 ~]#  cd postgresql-14.6

4、预编译

[root@ligc_227 postgresql-14.6]# ./configure --prefix=/usr/local/postgresql

5、编译安装

[root@ligc_227 postgresql-14.6]# make && make install

6、创建数据目录

[root@ligc_227 postgresql-14.6]# cd  /usr/local/postgresql

[root@ligc_227 postgresql ]# mkdir data

7、创建用户并修改目录权限

[root@ligc_227 postgresql ]#   useradd postgresql

[root@ligc_227 postgresql ]#  chown  -R  postgresql.  data/

8、修改用户环境变量

[root@ligc_227 postgresql ]#  vim /home/postgresql/.bash_profile

export PGHOME=/usr/local/postgresql                 #最后一行添加即可

export PGDATA=$PGHOME/data

export PATH=$PATH:$HOME/bin:$PGHOME/bin 

9、使用普通用户初始化

这里需要切换到postgres用户下执行下面命令(不支持root下运行)

[root@ligc_227 postgresql-14.6]#  su - postgresql  #切换用户

[postgresql@ ligc_227  ~]$ cd /usr/local/postgresql/

[postgresql@ ligc_227 postgresql]$  initdb                             #初始化

10、修改配置文件

[postgresql@ligc_229 ~]$  vim /usr/local/postgresql/data/postgresql.conf

listen_addresses = '*'         #60行,取消注释,修改成*;   

port = 5432                                          #64行,取消注释;

[postgresql@ligc_229 ~]$  vim /usr/local/postgresql/data/pg_hba.conf

host    all             all             0.0.0.0/0                     trust

         ###添加到92行,IPV4local位置的127.0.0.1/32下面;

11、编辑启动脚本

[postgresql@ ligc_229  ~]$ su - root             #切换至root用户;

[root@ ligc_229 ~]# cd postgresql-14.6/contrib/start-scripts/             #切换目录

[root@ ligc_229 start-scripts]# ls             

freebsd  linux  macos                  # linux文件为Linux系统启动脚本

[root@ ligc_229 start-scripts]# chmod a+x linux         #增加执行权限

[root@ ligc_229 start-scripts]# cp linux /etc/init.d/postgresql      

#拷贝文件到init.d并改名为postgresql;

[root@ ligc_229 start-scripts]# vim /etc/init.d/postgresql       #编辑文件

prefix=/usr/local/postgresql          #32行,修改安装目录;

PGDATA="/usr/local/postgresql/data"          #35行,修改数据目录;

PGUSER=postgresql                                  #38行,修改运行账号

12、启动服务

[root@ ligc_229 start-scripts]# chkconfig --add postgresql    #添加启动管理

[root@ ligc_229 start-scripts]# chkconfig postgresql on          #开机启动

[root@ ligc_229 start-scripts]# service postgresql start           #启动服务

Starting PostgreSQL: ok

[root@ ligc_229 start-scripts] netstat -antup | grep 5432 #查询端口

查询postgres服务状态

[root@ligc_229~]# pg_ctl status

启动postgres服务

[root@ligc_229~]# pg_ctl start

重启postgres服务

[root@ligc_229~]# pg_ctl restart

停止postgres服务

[root@ligc_229~]# pg_ctl stop

13、数据库创建用户

[root@ligc_229~]# su - postgresql          #切换用户

[postgresql@ligc_229~]$ psql                         #登录数据库;

postgres=# create user sonarqube with password '123456';   #创建数据库用户sonarqube ,密码为123456

postgres=# alter user sonarqube createrole createdb replication login;

ALTER ROLE                                   #修改用户权限

postgres=# \du

14、创建数据库

postgres=# create database sonarqube owner sonarqube;    

CREATE DATABASE  #创建数据库,所属者为sonarqube用户;必须创建这个数据库不然启动会报错

postgres=# \l           #查看数据库列表,小写的L

 

切换数据库

postgres=# \c      //切换到test数据库   \c test;

退出数据库用户

postgres=# \q 或者 exit 或者quit

查看数据库用户权限列表

postgres=# \du

四、安装sonarqube

1、安装jdk

1)部署环境

  • 下载 JDK 压缩包,上传到服务器
  • 本文下载的版本:jdk-11.0.19_linux-x64_bin.tar.gz

#下载网站:https://www.oracle.com/java/technologies/javase/jdk11-archive-downloads.html

2)安装

[root@ligc_227~]#  yum -y install jdk-11.0.22_linux-x64_bin.rpm

3)查看版本

[root@ligc_227~]#  java -version

java version "11.0.22" 2024-01-16 LTS

Java(TM) SE Runtime Environment 18.9 (build 11.0.22+9-LTS-219)

Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.22+9-LTS-219, mixed mode)

2、安装sonarqube

  #下载网站

https://www.sonarsource.com/products/sonarqube/downloads/historical-downloads/   

1)   下载软件包

[root@ligc_227~]# wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-9.2.0.49834.zip

 [root@ligc_227~]# mv sonarqube-9.2.0.49834.zip /opt/

2)   解压

[root@ligc_227~]#  cd /opt/

[root@ligc_227opt]# unzip sonarqube-9.2.0.49834.zip

[root@ligc_227opt]# ls

sonarqube-9.2.0.49834  sonarqube-9.2.0.49834.zip

3)   创建用户

[root@ligc_227opt]# useradd sonarqube

原因:

 

其实就是elasticsearch的原因,elsticsearch不能用root启动,sonarqube包含这个组件

4)   修改权限

[root@ligc_227opt]# chown -R sonarqube:sonarqube sonarqube-9.2.0.49834

5)   切换用户并启动

[root@ligc_227 opt]# su - sonarqube

[sonarqube@ligc_227~]$ cd /opt/sonarqube-9.2.0.49834/bin/linux-x86-64

[sonarqube@ligc_227linux-x86-64]$ ./sonar.sh start

Starting SonarQube...

Started SonarQube.

#这个过程需要等待一段时间,或者查看日志。

#查看端口

[root@ligc_227 opt]#  netstat -antup |grep 9000

3、网页操作

1)   网页登录

输入:http://192.168.10.227:9000

默认账号密码:admin/admin

2)   配置token

4、配置jenkins

1) 配置jenkins凭据

有这个token之后,为了重复利用,我们把他作为一个【凭据】保存在jenkins里面,也就是在jenkins里面创建一个凭据。我们回到jenkins,到-系统管理-管理凭据添加一个类型为Secret tex的凭据。

2)安装SonarQube servers插件

3) 配置sonar-scannerr

到jenkins的系统管理-工具配置里面,配置一下sonar-scannerr,主要就是告诉jenkins我们要使用哪个版本的scanner

4)配置jdk

5、配置jenkins和sonarqube连接

还差一步,那就是最关键的jenkins和sonarqube连接,我们转到 jenkins的 系统管理-系统配置,往下一直拉,找到SonarQube servers

五、测试

这里我采用的是maven的若依项目进行测试

1、创建jenkins测试项目

添加的内容:

sonar.projectKey=demo  #去sonarqube上进行配置的,同下列的Name

sonar.projectName=demo

sonar.projectVersion=1.0

sonar.language=java

sonar.sourceEncoding=UTF-8

sonar.sources=$WORKSPACE

sonar.java.binaries=$WORKSPACE

详解:

sonar.projectKey=demo: 这是项目的唯一标识键。在SonarQube服务器上,每个项目通过此键进行识别,确保在同一个SonarQube实例中它是唯一的。尽管直接写在这里的是项目密钥。

sonar.projectName=demo: 这是项目在SonarQube界面中显示的名称,可以是更易读的文本,不一定需要与sonar.projectKey相同,但通常保持一致以便于理解。

sonar.projectVersion=1.0: 指定项目的版本。这对于跟踪不同版本的代码质量非常有用。

sonar.language=java: 指定分析的代码语言。在这个例子中,您正在配置Java项目。

sonar.sourceEncoding=UTF-8: 设置源代码文件的字符编码,确保SonarQube能够正确地读取和分析源代码。

sonar.sources=$WORKSPACE: 指定了要分析的源代码目录。$WORKSPACE是一个环境变量或变量引用,通常在持续集成/持续部署(CI/CD)工具中设置,指向包含源代码的工作空间目录。

sonar.java.binaries=$WORKSPACE: 指定编译后Java字节码的路径。这使得SonarQube能够进行更深入的分析,比如对代码覆盖和复杂度的计算。同样使用了$WORKSPACE作为路径,意味着假设编译输出与源代码位于同一目录下,这在某些情况下可能需要根据实际情况调整。

2、配置sonarqube

#创建一个project叫doem

3、Jenkins构建项目

4、Sonarqube查看检测结果

  • 24
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值