基于GitLab搭建DevSecOps流水线

news2024/12/25 2:33:23

本博客地址:https://security.blog.csdn.net/article/details/130734964

一、GitLab安装

GitLab是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建Web服务,可通过Web界面访问公开的或者私人的项目。它拥有与GitHub类似的功能,能够浏览源代码,管理缺陷和注释,也可以自定义流水线(pipeline),在流水线中配置CI/CD以及集成软件质量测试和安全测试工具。

安装环境:CentOS
安装要求:内存大于2GB

安装GitLab:

yum install openssh-server
yum install postfix
lokkit -s http -s ssh
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash
yum install -y gitlab-ee

配置GitLab(可选项):

vim /etc/gitlab/gitlab.rb
--------------------------------------------------------------------

# GitLab默认会占用80、8080和9090端口,为避免冲突可以改默认端口
# 修改以下<>中的值:
external_url 'http://<IP>:<端口>'
unicorn['port'] = <8080>
prometheus['listen_address'] = 'localhost:<9090>'

修改完后重新配置:

gitlab-ctl reconfigure

其他操作:

# 查看安装后的程序运行情况
gitlab-ctl status

# 重启Gitlab服务
gitlab-ctl restart

# 启动Gitlab
gitlab-ctl start

# 关闭Gitlab
gitlab-ctl stop

打开对应端口:

# 查看防火墙的状态;
firewall-cmd --state

# 如果上一步处于关闭状态:
systemctl start firewalld.service

# 开启8081端口(因为我这里设置的是8081):
firewall-cmd --zone=public --add-port=8081/tcp --permanent

# 重启防火墙:
systemctl restart firewalld.service

#重新载入配置:
firewall-cmd --reload

登录GitLab,用户名是root,初始密码保存在/etc/gitlab/initial_root_password文件中

在这里插入图片描述

二、创建pipeline

1、先创建或导入一个Project

在这里插入图片描述

2、创建Pipeline

单击(CI/CD)下拉菜单中的(Editor)选项进入(Editor)页面,根据pipeline模板创建一条流水线。在默认模板中,新建的流水线有构建(Build)、测试(Test)、交付(Deploy)三个阶段。

在这里插入图片描述

具体每个阶段干什么可以通过pipeline进行配置,因为整个过程需要在服务器上编译、打包等等,单靠gitlab server是不能完成这个事情的,要让这个pipeline真正地运行起来,需要在服务器上创建一个GitLab runner,并把GitLab runner注册到GitLab server上,这样GiTlab Server的pipeline就可以使用runner来执行任务了。

安装gitlab runner并绑定:

curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
chmod +x /usr/local/bin/gitlab-runner 
useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
/usr/local/bin/gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
/usr/local/bin/gitlab-runner start
# registration-token在gitlab的界面上查看获取,路径是 project/setting/CICD/Runners
/usr/local/bin/gitlab-runner register --url http://192.168.153.110:8081/ --registration-token GR1348941nYaiLm7--Hn7HeiRT8W3

完成gitlab runner的注册之后,就可以执行pipeline了,如下所示:

在这里插入图片描述

三、Gitlab与ZAP集成

ZAP(Zed Attack Proxy)是一个动态的应用安全测试工具。我们这里通过GitLab流水线自动触发,并生成安全测试报告,之后GitLab对其进行评估,以确定目标分支之间已发现的安全漏洞

ZAP安装:

# ZAP依赖于Java11,先安装Java11
yum install java-11-openjdk.x86_64
wget https://github.com/zaproxy/zaproxy/releases/download/v2.12.0/ZAP_2_12_0_unix.sh
# 在这一步安装过程中,根据提示输入ZAP配置参数
sh ZAP_2_12_0_unix.sh

ZAP命令工具安装:

# 创建ZAP的目录链接,zap-cli默认从/zap路径下寻找zap.sh工作脚本
ln -s /opt/zaproxy/ /zap
dnf install python3
pip3 install --upgrade zapcli

通过zap-cli对应用进行扫描:

zap-cli --verbose quick-scan -sc --start-options '-config api.disablekey=true' http://192.168.153.110:31874/

在这里插入图片描述

如果需要自动触发扫描,就要将ZAP与GitLab进行集成,在GitLab pipeline中增加一个阶段,在这个阶段中运行ZAP安全扫描。这样在每次自动化构建生成应用镜像后,GitLab流水线自动将应用部署在云原生环境中,并自动运行ZAP安全测试,最后生成安全测试报告。这样就实现了自动化的代码集成、编译构建、应用部署和安全测试。

由于扫描对针对运行起来的服务,所以扫描的执行阶段配置在deploy阶段之后:

在这里插入图片描述

配置zap_scan阶段的执行脚本:

在这里插入图片描述

将sh脚本放在:/root/gitlab/quick_scan-zap.sh,脚本内容如下:

! /bin/bash
zap-cli --verbose quick-scan -sc --start-options '-config api.disablekey=true' $1 -l Informational | tee scan_result.txt; alerts=cat scan_result.txt | grep 'High | Critical' | (wc -l);
echo $alerts
Get Results
if [ $alerts -gt 0 ]; then
  echo "$alerts findings.Build failing"
  exit 1
else
  exit 0
  echo "success -no findings identified"
fi

此时,在GitLab运行pipeline,运行完成之后,就可以看到ZAP的扫描结果了

四、Gitlab与SonarQube集成

SonarQube是主流的自动代码审计工具,可检测代码中的错误和漏洞。它支持包括Java、Python、Golang、C在内的几十种编程语言的代码质量管理与检测。同时SonarQube也可以与CI/CD流水线集成,在项目进行过程中连续地执行代码检查。

依赖环境安装:

# SonarQube依赖于Java11,先安装Java11
yum install java-11-openjdk.x86_64

# SonarQube依赖于ElasticSearch,切换为非root账号来启动
安装教程:https://blog.csdn.net/xionglangs/article/details/123789875

SonarQube安装:

# 先下载SonarQube的软件包,然后解压
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-9.9.1.69595.zip
unzip sonarqube-9.9.1.69595.zip
cd sonarqube-9.9.1.69595/bin/linux-x86-64/
./sonar.sh start

安装完成之后,SonarQube就可以运行了。

接下来需要将SonarQube与GitLab进行集成,这样就可以从GitLab流水线发起自动化代码扫描任务,与前面集成ZAP类似,pipeline脚本如下:

stages:
  - build
  - test
  - sonar_check
  - deploy
  - zap_scan
......
sonarqube-analysis:
  stage: sonar_check
  script:
    - /home/gitlab/sonar_analyze.sh
    - sleep 10
  only:
    - master

至此,我们就实现了Gitlab与SonarQube的集成。

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

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

相关文章

【总结】数据建模调研与设计

一、数据建模背景和目的 1.1 数据建模任务背景 a. xxxx 中台新增数据建模模块&#xff0c;对标行业最佳实践&#xff0c;补齐数据中台短板。 b. 以往的数据建模&#xff0c;包括数仓模型的设计、数仓模型的落地&#xff0c;都是通过第三方的工具&#xff0c;例如DBwaver、Nav…

SOFA Weekly|SOFA 大事记、Layotto 社区会议回顾与预告、社区本周贡献

SOFA WEEKLY | 每周精选 筛选每周精华问答&#xff0c;同步开源进展 欢迎留言互动&#xff5e; SOFAStack&#xff08;Scalable Open Financial Architecture Stack&#xff09;是蚂蚁集团自主研发的金融级云原生架构&#xff0c;包含了构建金融级云原生架构所需的各个组件&am…

【信息安全案例】——应用软件安全(学习笔记)

&#x1f4d6; 前言&#xff1a;随着应用软件日益增多&#xff0c;与我们的生活深度绑定&#xff0c;应用软件的安全性问题愈发凸显。针对恶意代码、代码漏洞等安全风险&#xff0c;必须加强安全意识&#xff0c;采取有效措施进行防范。合理有效的安全措施能够确保用户的信息安…

(数字图像处理MATLAB+Python)第九章图像形态学运算-第一、二节:形态学基础和二值形态学运算

文章目录 一&#xff1a;形态学基础&#xff08;1&#xff09;结构元素&#xff08;2&#xff09;程序 二&#xff1a;二值形态学的基础运算&#xff08;1&#xff09;基本形态变换A&#xff1a;膨胀运算①&#xff1a;概述②&#xff1a;示例③&#xff1a;程序 B&#xff1a;…

CleanMyMac X4.13.4中文版下载及使用教程

随着Mac电脑的广泛普及&#xff0c;越来越多的用户开始关注如何保持自己电脑的快速运行。众所周知&#xff0c;Mac电脑的性能和稳定性得到了广泛认可。但是&#xff0c;随着使用时间的增加和数据的增加&#xff0c;任何电脑都可能变得缓慢和难以使用。为了解决这一问题&#xf…

2-《Java进阶》

2-《Java进阶》 一. java多线程&#xff08;非常重要&#xff09;1.1. 线程java多线程实现方式主要有&#xff1a;1.继承Thread 2.实现Runnable3.实现CallableRunnable 与 Callable的区别&#xff1a;1.2. 线程的状态有哪些&#xff1f;1.3. 线程的状态转换及控制1.4. Java如何…

SeaweedFs使用-通过http接口实现文件操作

通过http接口实现文件操作 SeaweedFs可通过filer的http接口/master中的http接口来进行文件上传 1.通过master的接口进行上传文件 通过各种方式进行请求接口&#xff1a;http://localhost:9333/submit, ip和端口号是master服务的信息。此接口通过post请求方式将文件的二进制流…

3-《安卓基础》

3-《安卓基础》 1.Android系统架构2.四大组件1Activity1.1 生命周期1.2. Activity四种启动模式1.3.Activity任务栈的概念1.3.Activity的显示启动和隐示启动1.4.scheme使用场景&#xff0c;协议格式&#xff0c;如何使用&#xff1f;1.5.activty间传递数据的方式1.6.跨进程启动A…

网络安全-kail linux渗透测试(基础篇)

渗透测试是一个非常广的课程&#xff0c;我们首先要做的是在某个方向精通&#xff0c;再在其他方面也要有涉猎。 大部分的漏洞是国外挖掘的。 一、推荐研究书籍&#xff1a; Metasploit浚透测试指南》肯尼(行业经典) 诸葛建伟翻译 《Metasloit渗透测试魔鬼训练营》诸葛建伟…

运用pyecharts制作可视化大屏(代码展示及效果图-动图)

一、Matplotlib绘图 折线图 import matplotlib.pyplot as plt # 调用画图库 plt.rcParams[font.sans-serif] [SimHei] # 设置成可以显示中文&#xff0c;字体为黑体 plt.figure(figsize(12,8)) # 调整图片尺寸 x [周一,周二,周三,周四,周五,周六,周日] # 设置x轴数据 y [401…

物联网网络通讯知识

RTU是什么 RTU英文全称Remote Terminal Units&#xff0c;中文全称为远程终端单元。远程终端设备(RTU)是安装在远程现场的电子设备&#xff0c;用来监视和测量安装在远程现场的传感器和设备。通俗理解就是能够编程的还可以将数据传输到服务器的工具。RTU内部是包含通讯模块的&…

4、详细版易学版TypeScript - 元组 枚举

一、元组(Tuple) 数组&#xff1a;合并了相同类型的对象 const myArr: Array<number> [1, 2, 3]; 元组(Tuple)&#xff1a;合并了不同类型的对象 // 定义元组时就要确定好数据的类型&#xff0c;并一一对应 const tuple: [number, string] [12, "hi"]; // 添…

QT客户端外包开发的特点

QT是一种跨平台的C应用程序开发框架&#xff0c;主要用于开发图形用户界面(GUI)应用程序。它提供了一套丰富的类库和工具&#xff0c;可以帮助开发者快速构建高质量、可扩展、易于维护的应用程序。今天和大家分享一下QT的主要特点和注意的问题&#xff0c;希望对大家有所帮助。…

探索LeetCode【0011】盛最多水的容器(已懂)

目录 0. 题目1. 官方解答一&#xff08;已懂&#xff09;2. 精简解答二&#xff08;已懂&#xff09;3. 正确性解释 0. 题目 题目链接&#xff1a;【0011】盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i,…

From Java To Kotlin:空安全、扩展、函数、Lambda很详细,这次终于懂了

From Java To Kotlin, 空安全、扩展、函数、Lambda 概述&#xff08;Summarize&#xff09; Kotlin 是什么&#xff1f;可以做什么&#xff1f;Android 官方开发语言从Java变为Kotlin,Java 有哪些问题&#xff1f;Kotlin的优点Kotlin 特性&#xff08;Features&#xff09; K…

有名的国外CRM系统有哪些?如何选择?

CRM系统可以帮助企业获得更多地潜在客户&#xff0c;优化销售流程&#xff0c;提高工作效率&#xff0c;增强客户服务水平&#xff0c;是如今企业不可或缺的工具。那么&#xff0c;国外CRM的知名厂商有哪些&#xff1f;下面小编来为大家进行推荐。 Zoho CRM&#xff1a; Zoho…

快手国际化 后端开发面经一面

目录 1.JMM内存模型2.堆怎么管理内存3.垃圾回收算法4.跨代引用问题怎么解决5.垃圾回收器6.CMS回收过程7.G1和CMS区别 1.JMM内存模型 计算机存储结构&#xff0c;从本地磁盘到主存到CPU缓存&#xff0c;也就是从硬盘到内存&#xff0c;到CPU。 问题&#xff1f;和推导出我们需要…

全国节能宣传周知识答题活动

全国节能宣传周知识答题活动 若想在短期内&#xff0c;进行安全生产知识的传播&#xff0c;那么答题无疑是有效方式之一。 答题活动小程序v3.0&#xff0c;基于微信原生小程序云开发实现。主要包含六大功能模块页面&#xff0c;首页、活动规则页、排行榜页、答题页、结果页、…

每日一个MySQL问题: MTS 高并发下主从表空间不一致的问题

简单记录原因&#xff0c;最近我也遇到这样的问题&#xff0c;涉及的知识点其实很多&#xff0c;我也仅仅是简单分析了一下&#xff0c;供参考。模拟版本8.0.28。 一、问题说明和模拟方式 就是主从一个表&#xff0c;主库大约600M&#xff0c;从库大约900M&#xff0c;当然主从…

推荐一个网络安全网站(HTML)

废话不多&#xff0c;直接上链接https://www.hackthissite.org/ 这不是一个新手向的网站&#xff0c;建议有一定基础的同学访问&#xff0c;里面大部分都是黑客实操&#xff0c;对大部分希望学习网络安全并有一定基础的人都可以有较大提升 全区英文&#xff0c;这对各位应该不…