devops===》Jenkins(自由风格)+gitlab+sonar代码扫描漏洞扫描

本文详细介绍了如何在Linux环境下安装SonarQube、PostgreSQL数据库,并配置SonarQube进行代码质量检查。接着,通过Jenkins与GitLab的集成,实现了代码提交自动触发SonarQube扫描,确保代码质量。内容涵盖了SonarQube的配置、Jenkins的系统配置、GitLab的访问令牌设置以及自动化流程的测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、安装sonar

官网地址:https://docs.sonarqube.org/
下载地址:https://www.sonarqube.org/downloads/
资料地址:https://docs.sonarqube.org/latest/
支持的编程语言:27种,包括:Java,python,go,php,C,C++,C#,JS等等
版本区分:免费开源社区版,开发者版,企业版,数据中心版
硬件要求:SonarQube在服务器端不支持32位系统
数据库:SonarQube的7.9版本开始放弃支持MySQL数据库,8.4版本支持PostgreSQL、Microsoft SQL Server和Oracle三种数据库

Linux平台运行Sonar的要求:

  • vm.max_map_count 大于或等于524288
  • fs.file-max 大于或等于131072
  • 运行SonarQube的用户可以打开至少131072个文件描述符
  • 运行SonarQube的用户可以打开至少8192个线程

1.安装jdk11

安装版本:sonarqube-8.4.2
安装平台:Linux
需要JDK版本:JDK-11

#1.上传包
#2.解压
tar zxf jdk-11-linux-x64.tar.gz -C /opt
#3.修改环境变量
vim /etc/profile
export JAVA_HOME=/opt/jdk11
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH

source /etc/profile
#4.验证
java -version

2.安装postgreSQL数据库

#1.下载包
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
yum install -y postgresql12
yum install -y postgresql12-server

/usr/pgsql-12/bin/postgresql-12-setup initdb

systemctl enable postgresql-12

systemctl start postgresql-12
#2.修改/var/lib/pgsql/12/data/pg_hba.conf配置,开放所有Host的访问:
vim /var/lib/pgsql/12/data/pg_hba.conf 
# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            ident
host    replication     all             ::1/128                 ident
#3.重启数据库
systemctl restart postgresql-12
#4.切换用户进入PostgreSQL的命令行,并且添加一个新的数据库用户sonar和新的数据库sonar备用
su - postgres  #进入普通用户
psql -U postgres  #切换管理员用户
CREATE USER sonar WITH PASSWORD 'sonar';
CREATE DATABASE sonar WITH OWNER sonar ENCODING 'UTF8';

3.安装SonarQube

#1.调整系统参数(如果当前的会话是root用户,可以直接通过下面的命令去修改这四个参数)
sysctl -w vm.max_map_count=262144
sysctl -w fs.file-max=65536
ulimit -n 65536
ulimit -u 4096

否则需要手动修改/etc/security/limits.conf文件,在文件尾部添加:
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096
修改/etc/sysctl.conf文件,在文件尾部添加:
vm.max_map_count=262144
fs.file-max=65536

#2.Sonar下载后直接在服务器上解压
unzip -d /data/ sonarqube-8.4.2.36762.zip
#3.添加用户,并设置sonarqube文件夹的权限
useradd sonar
chown -R sonar.sonar sonarqube-8.4.2.36762
#4.修改sonar配置文件
vim /data/sonar/sonarqube-8.4.2.36762/conf/sonar.properties

sonar.jdbc.username=sonar
sonar.jdbc.password=sonar

sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonar
#5.使用sonar用户启动Sonar
su sonar
/data/sonarqube-8.4.2.36762/bin/linux-x86-64/sonar.sh console  #尝试控制台启动sonar
/data/sonar/sonarqube-8.4.2.36762/bin/linux-x86-64/sonar.sh start  #控制台显示正常输出之后使用start命令启动即可
#6.登录
IP:9000
默认账号admin 默认密码admin

在这里插入图片描述
安装汉化(管理员身份进去安装插件,安装时会提示需要重启sonar服务)
在这里插入图片描述

二、sonar的web界面的各项配置解释

1.菜单栏解释

在这里插入图片描述

项目:被扫描的项目
问题:被扫描的项目的问题
代码规则:代码检测规则
质量配置:质量配置是在分析时使用的规则集合。可以启用或者禁用某些规则。
质量阈:正常/错误(项目扫描结果显示)。可以指定一些指标条件时为错误,比如bug数大于某个值时为错误。

2.项目代码情况

在这里插入图片描述

指标说明:一般将鼠标放在图标上就会显示这个指标的说明
bugs:bug的数量
漏洞:漏洞的数量
异味:不规范代码的数量
覆盖率:单元测试的对代码的覆盖率
重复:重复代码的行数占总代码行数的比例
大小:代码行数
编程语言:项目检测的编程语言
等级说明:由ABCDE5个等级,从A的绿色到E的红色表示严重等级。

3.项目问题说明

类型:一条规则定义的类型,有4种:bug,漏洞,异味,安全热点时单独的
严重程度:有5种:阻断,严重,重要,次要,提示
状态:5种:打开,解决,重开,关闭,确认
负责人:分配给谁
修复预估时间:系统给的预计修复时间
评论:可以评论

在这里插入图片描述

  • Reliability可靠性
    可靠性比率的计算方法:
    A = 0 Bug 最高等级A,表示代码无bug
    B = at least 1 Minor Bug 代码只要有一个次要bug,等级就为B
    C = at least 1 Major Bug 只要包含一个重要bug,等级将为C
    D = at least 1 Critical Bug 只要有一个严重bug,等级评估为D
    E = at least 1 Blocker Bug 只要有一个最高等级的阻断级别的bug,可靠性评估为E,最低级别。
    图中气泡大小根据bug数变化,bug数越大气泡越大。视觉更加直观。
  • Security安全性
    安全度指标计算方法:
    A = 0 Vulnerability 没有漏洞时,项目评估为最高级别A
    B = at least 1 Minor Vulnerability 只要包含一个次要漏洞,项目评估为级别B
    C = at least 1 Major Vulnerability 只要包含一个重要漏洞,项目评估为级别C
    D = at least 1 Critical Vulnerability 只要包含一个严重漏洞,评估为D
    E = at least 1 Blocker Vulnerability 只要包含一个阻断漏洞,项目评估为最低级别E
    图中气泡大小根据漏洞数变化,漏洞数越大气泡越大。视觉上直观显示。

Maintainability
技术债务:Technical Debt,当前不规范的代码,会对以后产品修改的成本造成影响。
开发成本:开发一行代码(LOC)的成本。 示例:如果开发1 LOC的成本估计为30分钟,则此属性的值为30。目前我们采用的是系统默认值30。注意此处成本是指从零开始重写代码所需的成本。
可维护性:可维护性等级范围从A(非常好)到E(非常差)。 评级由技术债务比率的值决定,技术债务比率是将项目的技术债务与从零开始重写代码所需的成本进行比较。 A到D的默认值为0.05,0.1,0.2,0.5。任何超过0.5评级就为E。
举个例子:假设开发成本是30分钟,2,500 LOC的技术债务为24,000分钟的项目将有技术债务比率为24000 /(30 * 2,500)= 0.32。 因此项目的可维护性评级就是D。

Coverage覆盖率
Coverage
行覆盖和条件覆盖的混合。单元测试覆盖多少源代码。Coverage = (CT + CF + LC)/(2*B + EL),其中 :
CT = conditions that have been evaluated to ‘true’ at least once至少有一次被判断为true的条件数
CF = conditions that have been evaluated to ‘false’ at least once 至少一次被判断为false的条件数
LC = covered lines = lines_to_cover uncovered_lines 已覆盖的行数
B = total number of conditions 条件总数
EL = total number of executable lines (lines_to_cover) 所有可执行的代码总行数

Line coverage
单元测试覆盖行数密度
Line coverage = LC / EL
LC = covered lines (lines_to_cover - uncovered_lines) 已覆盖的行数
EL = total number of executable lines (lines_to_cover) 所有可执行的代码总行数

Condition coverage
Condition Coverage=(CT+CF)/(2*B)
CT = 至少一次使用 ‘true’的条件数
CF = 至少一次使用 ‘false’ 的条件数
B = 条件总数

Unit test success density (%)
测试成功密度=(单元测试总数-(单元测试错误数+单元测试失败数))/单元测试数*100

Duplications重复
Duplication
SonarQube使用自己的复制/粘贴检测引擎,可以检测重复:
在源文件中
跨项目中的多个文件
项目的各个模块
跨多个项目
Duplicated Lines(%)
重复率=重复行数/总行数*100
Duplicated blocks:重复代码块行数
Duplicated files:重复文件数
Duplicated lines:重复行数

Size大小
Complexity复杂度
以下关键词增加复杂性:if, for, while, case, catch, throw, return (不是方法的最后一个语句), &&, ||, ?
else, default, finally不增加复杂度
代码复杂度过高将难以理解、难以维护。
Issues问题:
新违
违规
开启问题
重开问题
确认问题
误判问题
不修复的问题

三、sonar+Jenkins(自由风格)+gitlab实现自动化代码扫描

这里省略安装部署gitlab Jenkins(可爬楼看博主早些博客)

1.Jenkins链接sonar

sonar的web界面:配置–权限(用户)–填写令牌名称–点击生成
在这里插入图片描述
复制令牌
Jenkins与sonarqube建立联系
系统管理–系统配置
在这里插入图片描述
填写名称–sonarqube地址

在这里插入图片描述添加令牌–选择类型–粘贴刚刚sonarqube平台复制的令牌–添加
在这里插入图片描述
选择刚刚创建的令牌–点击保存
在这里插入图片描述
设置sonar scanner
系统管理–全局配置
在这里插入图片描述
Jenkins提前做好jdk maven的路径
找到sonar scanner–填写名称–勾选自动安装–选择scanner版本–点击保存
在这里插入图片描述
至此,Jenkins和sonarqube已经建立联系!

2.Jenkins链接gitlab

Jenkins插件安装:首页–系统配置–插件管理
在这里插入图片描述
可选插件–搜索gitlab–全部勾选–点击直接安装
在这里插入图片描述
gitlab生成访问令牌,与Jenkins建立联系,设置–访问令牌–填写名称–勾选api–点击创建令牌
在这里插入图片描述
生成后点击复制令牌
在这里插入图片描述
Jenkins中添加令牌,建立联系,测试连接
系统管理–系统配置
在这里插入图片描述
填写名称,gitlab仓库地址,点击添加token
在这里插入图片描述
选择token类型,填写刚刚再gitlab复制的token–点击添加
在这里插入图片描述
选择新添加的token–点击测试连接–显示成功–点击保存
在这里插入图片描述
到此,Jenkins与gitlab成功建立联系!

3.实操测试

在gitlab上创建新项目也可,选现有的也可(此处以现有项目为例)
配置–设置–网络–勾选Allow requests to the local network from hooks and services–保存
在这里插入图片描述
Jenkins创建任务(自由风格)
在这里插入图片描述
填写名称–勾选自由风格项目–确定
在这里插入图片描述
源码管理–勾选git–填写gitlab仓库地址–添加Jenkins账号密码–(gitlab平台账号密码:root/密码)
在这里插入图片描述
构建触发器–点击build。。。–复制url连接–点击高级–点击生成–复制生成的token–填写到gitlab
在这里插入图片描述
在这里插入图片描述
回到gitlab平台–选择对应项目–设置–集成–粘贴刚刚复制的url–填写刚刚复制的token
在这里插入图片描述
加成功后–点击test–点击push
在这里插入图片描述
提示200表示成功,如果不成功之前的配置–设置–网络–勾选Allow requests to the local network from hooks and services–保存需要操作
注:此步设置成功后,只要gielab提交代码就会触发Jenkins构建(若不需要此功能可不设置)
在这里插入图片描述
回到Jenkins–构建–填写配置信息–保存
sonar.projectKey=demo001
sonar.projectName=demo001
sonar.language=java
sonar.java.source=1.8
sonar.sources= W O R K S P A C E s o n a r . j a v a . b i n a r i e s = {WORKSPACE} sonar.java.binaries= WORKSPACEsonar.java.binaries={WORKSPACE}
sonar.login=admin
sonar.password=admin
在这里插入图片描述
保存–立即构建
成功后看sonarweb界面出现项目表示扫描成功
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值