DevOps工程技术价值流:GitLab源码管理与提交流水线实践

在当今快速迭代的软件开发环境中,DevOps(开发运维一体化)已经成为提升软件交付效率和质量的关键。而GitLab,作为一个全面的开源DevOps平台,不仅提供了强大的版本控制功能,还集成了持续集成/持续交付(CI/CD)、容器编排、监控等一系列工具,为团队提供了从代码管理到产品发布的端到端解决方案。本文将重点介绍GitLab在源码管理方面的应用,以及如何通过提交流水线实践实现持续集成。

一、概述

GitLab是一个自我托管的Git仓库管理系统,它提供了免费的公开和私有仓库、问题追踪、维基等功能,并支持团队协作,从项目规划到监控安全的全流程管理。GitLab通过Web界面简化了Git的使用,提高了开发效率。同时,GitLab还提供了自己的持续集成(CI)系统,允许用户轻松管理项目,并获得可视化的构建和测试结果。

二、GitLab安装部署

单独准备服务器,采用Docker安装,docker安装参照:

https://blog.csdn.net/heijunwei/article/details/128706198?spm=1001.2014.3001.5501

1、查看GitLab镜像

docker search gitlab

2、拉取GitLab镜像

docker pull gitlab/gitlab-ce

2、准备docker-compose.yml文件

version: '3.9'
services:gitlab:image: 'gitlab/gitlab-ce:latest'container_name: gitlabrestart: alwaysenvironment:GITLAB_OMNIBUS_CONFIG: |external_url 'http://ip:post'gitlab_rails['gitlab_shell_ssh_port'] = 2224ports:- 'post:post'- '2224:2224'volumes:- './config:/etc/gitlab'- './logs:/var/log/gitlab'- './data:/var/opt/gitlab'

4、启动容器(需要稍等一小会……)

docker-compose up -d

5、查看root用户密码并登陆

docker exec -it gitlab cat /etc/gitlab/initial_root_password

6、第一次登录后需要修改密码

三、GitLab工作流

GitLab是一个分布式版本控制系统,可以实现代码的存储、版本控制和协作。它使用Git作为代码仓库,支持团队多人协作和开发,保证代码的完整性。

1、创建项目组和项目

在GitLab上面,可以使用项目组对同一组织或者类型的项目进行分类,用项目组来管理项目,用项目来存储实际的代码。

1.1创建项目组

项目组(Group)是GitLab中管理项目的主要方式。在项目组下可以创建多个项目,并定义自己的成员和权限。项目组通常是由一个团队或部门的人一起使用的,他们可以共享代码并协同处理任务。

选择Menu→Groups→Create group创建项目组,如图

如果存在其他版本控制系统,如GitHub等,可以使用Import group导入其他系统中的项目组。这里选择Create group创建项目组

输入项目组的名称。项目组类型分为Public(公开)、Private(私有)、Internal(内部访问),这里我们选择Private类型项目组,单击Create group按钮完成创建,如图

1.2创建项目

项目(project)是GitLab中的每个代码库,它们与项目组相关联。每个项目都有一个Git存储库用于存储原始的应用代码和其他文件。

2、分支开发策略

通过标准化的流程和最佳实践,确保代码组织清晰、版本控制高效、变更管理有序,从而提高软件开发的质量、效率和可维护性,支持团队协作和持续集成/持续部署流程,最终实现项目的长期成功和发展

参加文档:https://blog.csdn.net/heijunwei/article/details/143820569?spm=1001.2014.3001.5502

三、提交流水线实践

提交流水线是指在代码提交阶段自动触发一系列构建、测试和部署任务,以确保每次提交都能够被及时验证并给出反馈。使用GitLab和Jenkins的集成,可以轻松实现提交流水线。

1、Jenkins配置

Jenkins Pipeline需要被GitLab触发。使用Generic Webhook插件为Jenkins Pipeline开启Webhook特性。

1.1创建Pipeline

创建一个新的Jenkins Pipeline,名称为devops-demo-service,类型选择“流水线

1.2开启触发器

开启Generic Webhook Trigger触发器,添加一个Post connect parameters用于捕获GitLab传递的数据,如分支名称、项目地址等。这里定义的变量名称为WebHookData

上述配置将GitLab传递的数据存储到WebHookData变量中,在Jenkins Pipeline中可以通过变量的方式解析变量的值。配置Jenkins Pipeline的触发Token。为了保证Token的唯一性,这里采用当前项目名称

开启Debug调试模式,如图中的两个选项有助于排查集成问题。例如,集成时因为变量、参数导致的问题可以在Jenkins Pipeline构建日志中显示出来。

1.3触发测试

当我们配置好触发器后,可以使用curl命令进行测试触发,命令如下。

curl http://192.168.1.200:8080/generic-webhook-trigger/invoke?token= devops-demo-service

2、GitLab配置

GitLab内置Webhook特性,可以在代码库开启并配置对应的事件以触发Webhook

2.1 项目开启Webhook

进入代码库,导航到Settings,单击左侧的Webhooks进入配置页面。在URL文本框中填写Jenkins的触发地址,在Trigger选项组中选择Push events触发事件,如图所示。

可以看到当前代码库具有Push events时就会触发Jenkins。代码提交、创建标签都属于Push events。确认参数无误后,单击Add webhook按钮完成添加,如图所示。可以看到当前代码库具有Push events时就会触发Jenkins。代码提交、创建标签都属于Push events。确认参数无误后,单击Add webhook按钮完成添加,如图所示。

提示:如果提示“Url is blocked: Requests to the local network are not allowed”错误信息,需要开启GitLab的local network配置。导航到Admin管理页面,选择Settings,单击Network进入配置页面。选中“Allow requests to the local network from web hooks and services”复选框。单击Save changes按钮保存配置,

2.2 测试Webhook

进入代码库,导航到Settings,单击Webhooks进入配置页面。将鼠标滚动到页面最下方可以看到已添加的Webhook。在Test下拉列表框中选择Push events选项可以进行模拟触发,如图所示。

2.3 编写Pipeline

在Jenkins Pipeline中,需要编写脚本以解析Webhook数据、下载代码并执行构建、测试和部署任务。通过读取Webhook数据中的项目地址、分支名称、提交ID等信息,可以确定需要构建的代码版本和分支。然后,使用Git命令下载代码,并执行后续的构建和测试任务。

2.3.1 解析Webhook数据

编写Jenkins Pipeline读取GitLab参数并解析出分支名称和仓库地址。代码如下

//GitLab传递的数据{}
println("${WebHookData}")//数据格式化
webHookData = readJSON text: "${WebhookData}"//提取仓库信息
env.srcUrl = webHookData["project"]["git_http_url"] //项目地址
env.branchName = webHookData["ref"] - "refs/heads/" //分支
env.commitId = webHookData["checkout_sha"]          //提交ID
env.commitUser = webHookData["user_username"]                //提交人
env.userEmail = webHookData["user_email"]            //邮箱currentBuild.description = "Trigger by Gitlab \n branch: ${env.branchName}
//增加构建描述
currentBuild.displayName = "${env.commitId}"                 //将构建ID变为提交ID

将上述代码保存到Jenkins Pipeline中,然后在GitLab项目中提交代码,测试是否可以正常触发。提交代码后,查看Jenkins构建结果。当出现了新的构建,说明配置成功。

2.3.2 下载代码

首先,在Jenkins系统中添加一个凭据,用于存储下载代码库的账户信息

接下来是提交流水线中的核心逻辑—下载代码。打开片段生成器,生成下载功能的代码,在项目分支中提交代码,然后导航到Jenkins项目页面,可以看到正在运行的构建。

pipeline {agent anystages {stage("CheckOut") {steps{script {checkout([$class :'GitSCM',branches:[[name:env.branchName]],extensions:[],userRemoteConfigs:[[credentialsId:'gitlabadmin-user',url:env.srcUrl]]])sh "ls -l" }}}}}

2.4 Pipeline优化

为了避免不必要的构建任务,可以对Jenkins的Generic Webhook Trigger进行优化。例如,可以设置触发构建的条件,如只有当指定分支更新时才触发构建,或者只有在特定标签添加时才构建。这样可以减轻服务器的负担,提高系统的稳定性和可靠性。

如果要过滤新建分支和标签的触发构建,可以在Generic Webhook中添加3个变量,分别是object_kind、before、after,以获取当前的提交信息,如下图。

通过正则表达式配置触发条件,在Expression文本框中填写^push\s(?!0{40}).{40}\s(?!0{40}).{40}$,在Text文本框中填写$object_kind $before $after。该表达式匹配push请求只有在after和before的值都不是40个0时才会触发构建,当值为40个0时,删除分支或者新建分支操作,过滤条件配置如图

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

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

相关文章

Spring 邮件发送

Spring 邮件发送 1. 主要内容(了解) 2. JavaMail 概述(了解) JavaMail,顾名思义,提供给开发者处理电⼦邮件相关的编程接⼝。JavaMail 是由 Sun 定义的⼀套收发电⼦邮件的 API,它可以⽅便地执⾏⼀…

VSCode如何关闭Vite项目本地自启动

某些情况下VSCode打开Vite项目不需要自动启动,那么如何关闭该功能 文件>首选项>设置 搜索vite 将Vite:Auto Start 勾选取消即可

一种多功能调试工具设计方案开源

一种多功能调试工具设计方案开源 设计初衷设计方案具体实现HUB芯片采用沁恒微CH339W。TF卡功能网口功能SPI功能IIC功能JTAG功能下行USB接口 安路FPGA烧录器功能Xilinx FPGA烧录器功能Jlink OB功能串口功能RS232串口RS485和RS422串口自适应接口 CAN功能烧录器功能 目前进度后续计…

Spark和MapReduce场景应用和区别

文章目录 Spark和MapReduce场景应用和区别一、引言二、MapReduce和Spark的应用场景1. MapReduce的应用场景2. Spark的应用场景 三、MapReduce和Spark的区别1. 内存使用和性能2. 编程模型和易用性3. 实时计算支持 四、使用示例1. MapReduce代码示例2. Spark代码示例 五、总结 Sp…

Python办公——openpyxl处理Excel每个sheet每行 修改为软雅黑9号剧中+边框线

目录 专栏导读背景1、库的介绍①:openpyxl 2、库的安装3、核心代码4、完整代码5、最快的方法(50万行44秒)——表头其余单元格都修改样式总结 专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️‍…

【C#】书籍信息的添加、修改、查询、删除

文章目录 一、简介二、程序功能2.1 Book类属性:方法: 2.2 Program 类 三、方法:四、用户界面流程:五、程序代码六、运行效果 一、简介 简单的C#控制台应用程序,用于管理书籍信息。这个程序将允许用户添加、编辑、查看…

01-树莓派基本配置-基础配置配置

树莓派基本配置 文章目录 树莓派基本配置前言硬件准备树莓派刷机串口方式登录树莓派接入网络ssh方式登录树莓派更换国内源xrdp界面登录树莓派远程文件传输FileZilla 前言 树莓派是一款功能强大且价格实惠的小型计算机,非常适合作为学习编程、物联网项目、家庭自动化…

无人机探测:光电侦测技术详解

一、基本原理 光电识别技术是无人机追踪设备的核心,其原理主要基于光电转换和信号处理技术。光电识别设备通过光学系统收集目标的光学信息,如可见光、红外光等,并将其转换为电信号。这些电信号随后被处理和分析,以实现对目标的识…

106.【C语言】数据结构之二叉树的三种递归遍历方式

目录 1.知识回顾 2.分析二叉树的三种遍历方式 1.总览 2.前序遍历 3.中序遍历 4.后序遍历 5.层序遍历 3.代码实现 1.准备工作 2.前序遍历函数PreOrder 测试结果 3.中序遍历函数InOrder 测试结果 4.后序遍历函数PostOrder 测试结果 4.底层分析 1.知识回顾 在99.…

go并发设计模式runner模式

go并发设计模式runner模式 真正运行的程序不可能是单线程运行的,go语言中最值得骄傲的就是CSP模型了,可以说go语言是CSP模型的实现。 假设现在有一个程序需要实现,这个程序有以下要求: 程序可以在分配的时间内完成工作&#xff0…

03-13、SpringCloud Alibaba第十三章,升级篇,服务降级、熔断和限流Sentinel

SpringCloud Alibaba第十三章,升级篇,服务降级、熔断和限流Sentinel 一、Sentinel概述 1、Sentinel是什么 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保…

【服务器问题】xshell 登录远程服务器卡住( 而 vscode 直接登录不上)

打开 xshell ssh 登录远程服务器:卡在下面这里,迟迟不继续 当 SSH 连接卡在 Connection established. 之后,但没有显示远程终端提示符时,这通常意味着连接已经成功建立,说明不是网络连接和服务器连接问题,…

图片预处理技术介绍4——降噪

图片预处理 大家好,我是阿赵。   这一篇将两种基础的降噪算法。   之前介绍过均值模糊和高斯模糊。如果从降噪的角度来说,模糊算法也算是降噪的一类,所以之前介绍的两种模糊可以称呼为均值降噪和高斯降噪。不过模糊算法对原来的图像特征的…

Linux 网络编程之TCP套接字

前言 上一期我们对UDP套接字进行了介绍并实现了简单的UDP网络程序,本期我们来介绍TCP套接字,以及实现简单的TCP网络程序! 🎉目录 前言 1、TCP 套接字API详解 1.1 socket 1.2 bind 1.3 listen 1.4 accept 1.5 connect 2、…

AI/ML 基础知识与常用术语全解析

目录 一.引言 二.AI/ML 基础知识 1.人工智能(Artificial Intelligence,AI) (1).定义 (2).发展历程 (3).应用领域 2.机器学习(Machine Learning,ML) (1).定义 (2).学习方式 ①.监督学习 ②.无监督…

计算机网络常见面试题总结(上)

计算机网络基础 网络分层模型 OSI 七层模型是什么?每一层的作用是什么? OSI 七层模型 是国际标准化组织提出的一个网络分层模型,其大体结构以及每一层提供的功能如下图所示: 每一层都专注做一件事情,并且每一层都需…

蓝桥杯准备训练(lesson1,c++方向)

前言 报名参加了蓝桥杯(c)方向的宝子们,今天我将与大家一起努力参赛,后序会与大家分享我的学习情况,我将从最基础的内容开始学习,带大家打好基础,在每节课后都会有练习题,刚开始的练…

Unity类银河战士恶魔城学习总结(P156 Audio Settings音频设置)

【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili 教程源地址:https://www.udemy.com/course/2d-rpg-alexdev/ 本章节实现了音频的大小设置与保存加载 音频管理器 UI_VolumeSlider.cs 定义了 UI_VolumeSlider 类,用于处理与音频设置相关的…

如何为 ext2/ext3/ext4 文件系统的 /dev/centos/root 增加 800G 空间

如何为 ext2/ext3/ext4 文件系统的 /dev/centos/root 增加 800G 空间 一、引言二、检查当前磁盘和分区状态1. 使用 `df` 命令检查磁盘使用情况2. 使用 `lsblk` 命令查看分区结构3. 使用 `fdisk` 或 `parted` 命令查看详细的分区信息三、扩展逻辑卷(如果使用 LVM)1. 检查 LVM …

java调用ai模型:使用国产通义千问完成基于知识库的问答

整体介绍: 基于RAG(Retrieval-Augmented Generation)技术,可以实现一个高效的Java智能问答客服机器人。核心思路是将预先准备的问答QA文档(例如Word格式文件)导入系统,通过数据清洗、向量化处理…