jenkins中添加sonnarqube与OWASP Dependency-Check

news2024/11/18 6:03:00

jenkins

jenkins离线插件地址:
http://updates.jenkins-ci.org/download/plugins
https://updates.jenkins.io/download/plugins           
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins   国内
linux 安装jdk11 文档:
https://blog.51cto.com/u_16175449/6648723

k8s中安装sonarqube

简介:

https://www.sonarsource.com/products/sonarqube/deployment/ 最新版镜像下载地址

注意这个是内置数据库的,内嵌数据库只能用于测试场景,内嵌数据库无法扩展,也无法升级到新版本的SonarQube,并且不能支持将你的数据迁移至其他数据库引擎

其中Community Edition (社区版) 免费的
在这里插入图片描述
我是在docker官方镜像找的lts镜像下载的lts版:
在这里插入图片描述
https://www.sonarsource.com/products/sonarqube/downloads/ 其他版本下载地址
在这里插入图片描述

Helm 方式

目前只支持Helm v3
此链接对应这k8s支持的版本号:
https://artifacthub.io/packages/helm/sonarqube/sonarqube-dce/10.0.0+521
在这里插入图片描述
官方部署文档参考,目前社区版不支持集群的方式:

https://docs.sonarsource.com/sonarqube/latest/setup-and-upgrade/deploy-on-kubernetes/deploy-sonarqube-on-kubernetes/

helm repo add sonarqube https://SonarSource.github.io/helm-chart-sonarqube
helm repo update
kubectl create namespace sonarqube
helm upgrade --install -n sonarqube sonarqube sonarqube/sonarqube

Yml方式

1.新版本7.9之后已经不再支持myql数据库,所以我们换成PostgreSQL
2.需要在k8s中准备一个strageclss(后端可以是nfs、ceph、juicefs、clusterfs)

[root@k8s-master01 ~]# kubectl get sc
NAME                   PROVISIONER       RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
juicefs-sc (default)   csi.juicefs.com   Delete          Immediate           false                  7d4h

1.安装PostgreSQL

apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres-sonar
  labels:
    app: postgres-sonar
spec:
  replicas: 1
  selector:
    matchLabels:
      app: postgres-sonar
  template:
    metadata:
      labels:
        app: postgres-sonar
    spec:
      containers:
      - name: postgres-sonar
        image: postgres:11.4
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 5432
        env:                       #变量代入
        - name: POSTGRES_DB
          value: "sonarDB"         #库名
        - name: POSTGRES_USER
          value: "sonarUser"       #账号
        - name: POSTGRES_PASSWORD 
          value: "123456"          #密码
        resources:
          limits:
            cpu: 1000m
            memory: 2048Mi
          requests:
            cpu: 500m
            memory: 1024Mi
        volumeMounts:
          - name: data
            mountPath: /var/lib/postgresql/data  #挂载路径
      volumes:
        - name: data
          persistentVolumeClaim:
            claimName: postgres-data

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: postgres-data 
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: "juicefs-sc"   #storageClass名称
  resources:
    requests:
      storage: 1Gi

---
apiVersion: v1
kind: Service
metadata:
  name: postgres-sonar
  labels:
    app: postgres-sonar
spec:
  clusterIP: None              #无头服务
  ports:
  - port: 5432
    protocol: TCP
    targetPort: 5432
  selector:
    app: postgres-sonar

上面的yaml中,我们使用的storageClassName: "juicefs-sc"
并且使用了无头服务(仅集群使用),可以改成nodeport(可对外提供服务)

2.安装sonarqube

因为安装的是社区版,数据库是内嵌的,所以提示只作用于测试,且不能升级
而社区版只有sonarqube:lts-community 这个版本的镜像是最稳定且外嵌数据库的

下列yml中,nodePort: 30003 需要自行修改为集群中未被占用端口
[root@k8s-master01 sonarkube]# cat sonarkube.yml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: sonarqube
  labels:
    app: sonarqube
spec:
  replicas: 1
  selector:
    matchLabels:
      app: sonarqube
  template:
    metadata:
      labels:
        app: sonarqube
    spec:
      initContainers:
      - name: init-sysctl
        image: busybox
        imagePullPolicy: IfNotPresent
        command: ["sysctl", "-w", "vm.max_map_count=262144"]
        securityContext:
          privileged: true
      containers:
      - name: sonarqube
        image: sonarqube:lts-community
        ports:
        - containerPort: 9000
        env:
        - name: SONARQUBE_JDBC_USERNAME
          value: "sonarUser"
        - name: SONARQUBE_JDBC_PASSWORD
          value: "123456"
        - name: SONARQUBE_JDBC_URL
          value: "jdbc:postgresql://postgres-sonar:5432/sonarDB"  #链接上面的pg,用无头服务的方式
        livenessProbe:
          httpGet:
            path: /sessions/new
            port: 9000
          initialDelaySeconds: 60
          periodSeconds: 30
        readinessProbe:
          httpGet:
            path: /sessions/new
            port: 9000
          initialDelaySeconds: 60
          periodSeconds: 30
          failureThreshold: 6
        resources:
          limits:
            cpu: 2000m
            memory: 2048Mi
          requests:
            cpu: 1000m
            memory: 1024Mi
        volumeMounts:
        - mountPath: /opt/sonarqube/conf
          name: data
          subPath: conf
        - mountPath: /opt/sonarqube/data
          name: data
          subPath: data
        - mountPath: /opt/sonarqube/extensions
          name: data
          subPath: extensions
      volumes:
      - name: data
        persistentVolumeClaim:
          claimName: sonarqube-data  

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: sonarqube-data 
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: "juicefs-sc"
  resources:
    requests:
      storage: 20Gi

---
apiVersion: v1
kind: Service
metadata:
  name: sonarqube
  labels:
    app: sonarqube
spec:
  type: NodePort
  ports:
    - name: sonarqube
      port: 9000
      targetPort: 9000
      nodePort: 30003   
      protocol: TCP
  selector:
    app: sonarqube

创建成功后查看pvc

存储大小可以在上面的yml中自行调整,我测试给的比较小
[root@k8s-master01 sonarkube]# kubectl get pvc
NAME            STATUS   VOLUME           CAPACITY                  ACCESS MODES  STORAGECLASS   AGE
postgres-data   Bound    pvc-0e3885a1-a4bc-4a8d-aac0-87d1ed62ab56   1Gi     RWX   juicefs-sc     89m
sonarqube-data  Bound    pvc-88544679-f7b8-4db4-8545-c012f5d0cfe7   20Gi    RWX   juicefs-sc     83m

登录Sonarqube

admin/admin  端口30003

在这里插入图片描述
安装中文插件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

生成key并记录key

在这里插入图片描述

Jenkins+SonarQube代码审查

在这里插入图片描述

安装SonarQube Scanner插件

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

在全局工具中配置sonarqube

在这里插入图片描述
在这里插入图片描述
这里需要注意,并不是安装最新版,这个版本需要知道你目前安装jenkins时的java版本,我这里用的java11,所以需要去安装java11支持的sonarqube版本,不然会报以下错误
在这里插入图片描述

jenkins中sonarqube scanner 对应的jdk版本:
https://docs.sonarsource.com/sonarqube/9.9/analyzing-source-code/scanners/sonarscanner/

在这里插入图片描述
在这里插入图片描述
可以看到为4.8,所以我们安装4.8的版本
在这里插入图片描述

添加SonarQube凭证

在这里插入图片描述

在这里插入图片描述

Jenkins进行SonarQube配置

在这里插入图片描述

在项目中添加sonarqube检查

以自由风格为例:打开test01
在这里插入图片描述
在这里插入图片描述

# must be unique in a given SonarQube instance 
sonar.projectKey=web_demo_freestyle
# this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1.
sonar.projectName=web_demo_freestyle 
sonar.projectVersion=1.0

# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
# This property is optional if sonar.modules is set. 
sonar.sources=. 
sonar.java.binaries=.
sonar.exclusions=**/test/**,**/target/**

sonar.java.source=11 
sonar.java.target=11

# Encoding of the source code. Default is default system encoding 
sonar.sourceEncoding=UTF-8

常用基础配置解释

sonar.projectKey=gpcore                       #sonar平台中相对应项目的key
sonar.projectName=gpcore                      #sonar平台中相对应项目的名字
sonar.sources=.                               #sonar检测的源文件目录,‘.’表示当前根目录下的所有文件目录;包含主要源文件的目录的逗号分隔路径
sonar.exclusions=**/*_test.go,**/vendor/**    #检测中排除的源文件(排除的源文件不参与检测,一般排除单元测试文件、配置文件等)
sonar.tests=.                                 #sonar检测的测试文件目录,‘.’表示当前根目录下的所有文件目录;包含测试源文件的目录的逗号分隔路径。从构建系统中读取MavenGradleMSBuild项目。否则默认为空。
sonar.test.inclusions=**/**_test.go           #检测中的测试源文件(指定单元测试文件)
sonar.test.exclusions=**/vendor/**            #检测中排除的测试源文件(排除的源文件不参与检测)

sonar.jdbc.usernamesonar.jdbc.password表示Sonar的数据库用户名和密码
sonar.host.url表示Sonar的监听地址和端口号,
sonar.sourceEncoding表示Sonar的编码方式,
sonar.jdbc.url表示数据库的链接方式,在这里我们的该项内容来源于Sonar的配置文件。sonar.projectKey为我们自定义的该Sonar Scanner的关键字,
sonar.projectName为该扫描项目的名称,
sonar.projectVersion表示Sonar项目的版本,
sonar.sources表示要扫描的项目目录

直接构建
在这里插入图片描述
在sonarqube服务器上刷新,查看结果
在这里插入图片描述
在这里插入图片描述

jenkins+OWASP Dependency-Check漏洞扫描

服务器部署OWASP Dependency-Check

Dependency-CheckOWASPOpen Web Application Security Project)的一个实用开源程序,用于识别项目依赖项并检查是否存在任何已知的,公开披露的漏洞。
目前,已支持Java.NETRubyNode.jsPython等语言编写的程序并为C/C++构建系统(autoconfcmake)提供了有限的支持。
而且该工具还是OWASP Top 10的解决方案的一部分。
Dependency-Check 支持面广(支持多种语言)、可集成性强,作为一款开源工具,在多年来的发展中已经支持和许多主流的软件进行集成
比如:命令行、AntMavenGradleJenkinsSonar等;具备使用方便,落地简单等优势。

DependencyCheck 实现原理
依赖性检查可用于扫描应用程序(及其依赖库),执行检查时会将 Common Platform Enumeration (CPE)国家漏洞数据库及NPM Public Advisories库下载到本地,再通过核心引擎中的一系列分析器检查项目依赖性,收集有关依赖项的信息。
然后根据收集的依赖项信息与本地的CPE&NPM库数据进行对比,如果检查发现扫描的组件存在已知的易受攻击的漏洞则标识,最后生成报告进行展示。
dependency-check下载地址
https://owasp.org/www-project-dependency-check/

https://jeremylong.github.io/DependencyCheck/  官方文档地址
https://github.com/jeremylong/DependencyCheck   gitlab地址

在这里插入图片描述

上传到jenkins所在服务器解压即可
[root@jenkins test01]# cd /data/owasp/
[root@jenkins owasp]# ll
total 30368
drwxrwxrwx. 7 root root      125 Sep 20 14:25 dependency-check
-rwxrwxrwx. 1 root root 31094435 Sep 20 14:22 dependency-check-8.4.0-release.zip

[root@jenkins test01]# chmod 777 -R  /data/owasp/

jenkins配置

下载插件
在这里插入图片描述
配置全局工具
在这里插入图片描述
在构建步骤选择增加构建步骤选择Dependency_check
在这里插入图片描述
在这里插入图片描述
直接构建
在这里插入图片描述
在这里插入图片描述
进入这个目录,把html下载下来打开直接打开
在这里插入图片描述
在这里插入图片描述

在sonarQube页面查看Dependency_check报告

1.下载dependency-check-sonar-plugin
https://github.com/dependency-check/dependency-check-sonar-plugin

一定要注意dependency-check-sonar-plugin与sonarQube的版本对应关系,我们部署的sonarQube是8.9,对应的dependency-check-sonar-plugin版本为:

在这里插入图片描述
2.下载下来之后使用:mvn clean package 生成jar包
将下载的sonar-dependency-check-plugin的jar包插件复制到sonarQube的extensions/plugins目录下,并且重启sonarqube,如果是镜像,需要手动编写Dockerfile,放入后生成新的镜像

在这里插入图片描述
3.返回到jenkins页面,在需要扫描的工程中,配置owasp的报告文件路径

sonar.dependencyCheck.htmlReportPath=./dependency-check-report.html
sonar.dependencyCheck.summarize=true
sonar.dependencyCheck.securityHotspot=true

4.注意执行顺序,先执行dependency-check,再执行sonarQube Scanner,因为sonar插件不会进行依赖扫描,需要通过dependency-check扫描完成后,读取配置文件,然后在页面展示的
在这里插入图片描述
在这里插入图片描述
5.构建完成后,在sonarQube页面,选择刚刚扫描的项目,选择更多,点击Dependency-Check,即可查看报告
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

流量狂飙!暴涨2000万播放成B站创作标杆

“民以食为天”,美食品类内容是人们日常生活所需延伸出来的一个内容版块,用户浏览量大、众多内容创作者并驱争先,一直到今天,所有人有目共睹美食内容是如何在“内卷”。 饶是如此赛道拥挤的美食圈,也有众多创作者不断…

java字符串压缩和字符串解压

java字符串压缩和字符串解压 运行效果 java工具类 CompressUtil.java import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.serializer.SerializerFeature; import org.apache.commons.codec.binary.Base64;import java.io.BufferedReader; import java.io.Byte…

【LeetCode-中等题】116. 填充每个节点的下一个右侧节点指针

文章目录 题目方法一:直接让每层不是最后一个的节点指向此时队首元素方法二:用list记录下每层的节点 然后再做链接 题目 方法一:直接让每层不是最后一个的节点指向此时队首元素 class Solution {public Node connect(Node root) {if(root nu…

健身完全手册

文章目录 饮食完全手册摄入总量日内分配来源和配餐方法专题&错误 训练完全手册训练分化动作模式胸背手肩腿臀腹训练计划 减脂完全手册胸肌训练(原理动作计划饮食)健身训练的分化、动作、配重体态大师 饮食完全手册 参考视频:&#x1f4a…

什么是Web浏览器的缓存机制?如何控制和清除浏览器缓存?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ Web浏览器的缓存机制⭐ 浏览器缓存的工作原理⭐ 控制和清除浏览器缓存控制缓存 ⭐ 清除缓存⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦&#xf…

YashanDB混合存储揭秘:行式存储如何为高效TP业务保驾护航(上)

上一篇文章《深度干货 | 揭秘YashanDB融合存储引擎》 https://mp.weixin.qq.com/s/yipJcEAH3fVA-_hnUvOiKA从存储结构、事务引擎、高可用等方面介绍了YashanDB存储引擎的整体架构。本篇为大家详细解读YashanDB行式存储技术。 背景 数据库底层组织数据的方式主要分为行式存储和…

成集云 | 金蝶云星空集成聚水潭ERP(金蝶云星空主管库存)| 解决方案

源系统成集云目标系统 方案介绍 金蝶云星空是金蝶软件(中国)有限公司研发的新一代战略性企业管理软件,致力于为企业提供端到端的供应链整体解决方案,它可以帮助企业构建敏捷供应链体系,降低供应链成本,提…

The existence and uniqueness of weak solution

See https://zhuanlan.zhihu.com/p/67522044 https://math.stackexchange.com/questions/1213260/what-is-a-good-definition-of-a-weak-solution

「聊设计模式」之模板方法模式(Template Method)

🏆本文收录于《聊设计模式》专栏,专门攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎持续关注&&收藏&&订阅! 前言 在软件开发中,设计模式是经典的解决方案&#…

广州某机械制造企业生产工序管理系统解决方案

RFID工序管理解决方案在生产工序中引入RFID技术,对生产工序的构件拼装、焊接、打磨后检测、打砂油漆后检测、构件拟装读取确认、项目管理人员收货确认等各个生产环节的数据进行自动化的数据采集,保证生产管理各个作业环节数据输入的效率和准确性&#xf…

如何防止数据库泄露,保障个人信息安全题

在数字化时代,个人信息安全和数据库安全至关重要。为了防止数据库泄露,保障个人信息安全,以下安策带来的一些建议: 1.强化密码管理 密码是保护个人信息安全的第一道防线。确保使用复杂且独特的密码,避免使用容易猜测或…

二分与前缀和

目录 🍈前言 ❤二分 🌹二分 🌼数的范围 🌼数的三次方根 🌼特殊数字 🌼机器人跳跃问题 🌼四平方和 🌼分巧克力 🌹前缀和 🌼前缀和 🌼子…

html form表单高级用法

场景&#xff1a;想单纯使用表单内置的api完成提交&#xff0c;不使用js代码 代码如下&#xff1a; <form name"myForm" action"http://localhost:13734/form" method"post"><label>用户名<input type"text" name&qu…

SecureCRT SSH与FTP连接中文乱码

1、首先要保证服务端环境变量是UTF-8编码的 LANG”zh_CN.UTF-8″ 2、会话里面配置好字符编码&#xff1a;UTF-8 SSH会话的窗口就可以正常显示中文了&#xff0c;效果如下 3、打开FTP或者SFTP时进行文件传输时&#xff0c;列表窗口里面还是乱码&#xff0c;需要把SecureCRT安…

BENTLY 350015 127610-01数字量输入模块

数字输入功能&#xff1a; BENTLY 350015 127610-01模块通常用于监测和采集数字输入信号&#xff0c;例如开关状态、传感器状态等。 多通道&#xff1a; 这些模块通常具有多个输入通道&#xff0c;允许同时监测多个数字输入信号。 高精度&#xff1a; BENTLY 350015 127610-0…

四维轻云平台倾斜模型三种加载方式及单体化操作介绍

为了优化倾斜模型浏览效果&#xff0c;「四维轻云」v1.4.1针对倾斜模型新增了三种加载方式&#xff1b;此外&#xff0c;平台还增加了单体化等功能。但很多用户还不会使用这些功能&#xff0c;小编就来向大家介绍一些如何设置倾斜模型的三种加载方式和单体化操作。 一、倾斜模…

爬虫技术对携程网旅游景点和酒店信息的数据挖掘和分析应用

导语 爬虫技术是一种通过网络爬取目标网站的数据并进行分析的技术&#xff0c;它可以用于各种领域&#xff0c;如电子商务、社交媒体、新闻、教育等。本文将介绍如何使用爬虫技术对携程网旅游景点和酒店信息进行数据挖掘和分析&#xff0c;以及如何利用Selenium库和代理IP技术…

如何连接到远程桌面

远程桌面连接是一个非常有用的工具&#xff0c;尤其是当越来越多的人在家工作或使用自己的设备工作时。使用远程桌面连接软件&#xff0c;管理员即使不在您的设备附近&#xff0c;也可以解决问题&#xff0c;他们可以远程访问它并快速解决可能出现的任何问题。 什么是远程桌面…

初探微前端

微前端 一、微前端的背景和概述1.1 概念1.2 特点1.3 背景 二、微前端的实现方式2.1 服务端集成2.2 运行时集成 三、现有的解决方案3.1 single-spa3.2 qiankun3.3 micro-app 四、总结 &#x1f680;&#x1f680;&#x1f680;   随着互联网技术的不断发展&#xff0c;前端应用…

如何构建高效的接口自动化测试框架(文档+视频讲解)

在选择接口测试自动化框架时&#xff0c;需要根据团队的技术栈和项目需求来综合考虑。对于测试团队来说&#xff0c;使用Python相关的测试框架更为便捷。无论选择哪种框架&#xff0c;重要的是确保 框架功能完备&#xff0c;易于维护和扩展&#xff0c;提高测试效率和准确性。今…