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.rhkb.cn/news/483616.html

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

相关文章

Android笔记【12】脚手架Scaffold和导航Navigation

一、前言 学习课程时,对于自己不懂的点的记录。 对于cy老师第二节课总结。 二、内容 1、PPT介绍scaffold 2、开始代码实操 先新建一个screen包,写一个Homescreen函数,包括四个页面。 再新建一个compenent包,写一个displayText…

动态规划-----路径问题

动态规划-----路径问题 下降最小路径和1:状态表示2:状态转移方程3 初始化4 填表顺序5 返回值6 代码实现 总结: 下降最小路径和 1:状态表示 假设:用dp[i][j]表示:到达[i,j]的最小路径 2:状态转…

C_字符串的一些函数

1.字符串输入函数 scanf("%s",数组名)&#xff1b; gets(数组名)&#xff1b; 区别&#xff1a; scanf(“%s”,数组名); 把空格识别为输入结束 #include <stdio.h>int main() {char a[10];printf("输入&#xff1a;");scanf("%s",a)…

【数据事务】.NET开源 ORM 框架 SqlSugar 系列

.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…

Zookeeper集群数据是如何同步的?

大家好&#xff0c;我是锋哥。今天分享关于【Zookeeper集群数据是如何同步的?】面试题。希望对大家有帮助&#xff1b; Zookeeper集群数据是如何同步的? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Zookeeper集群中的数据同步是通过一种称为ZAB&#xff08;Zo…

MySQL需掌握到何种程度?才能胜任工作

大家好&#xff0c;我是袁庭新。星友问&#xff1a;MySQL需要学到什么程度&#xff1f;才能胜任日常的软件开发工作呢&#xff01;以下是一些建议的学习目标和程度&#xff0c;这些目标旨在帮助你在工作中高效地使用MySQL。 数据库的基本概念、MySQL的安装及配置、SQL的概念、S…

HTML 快速上手

目录 一. HTML概念 二. HTML标签 1. 标题标签 2. 段落标签 3. 换行标签 4. 图片标签 5. 超链接标签 6. 表格标签 7. 表单标签 7.1 form 标签 7.2 input 标签 (1) 文本框 (2) 单选框 (3) 密码框 (4) 复选框 (5) 普通按钮 (6) 提交按钮 8. select标签 9. 无语义…

Qt 2D绘图之三:绘制文字、路径、图像、复合模式

参考文章链接: Qt 2D绘图之三:绘制文字、路径、图像、复合模式 绘制文字 除了绘制图形以外,还可以使用QPainter::darwText()函数来绘制文字,也可以使用QPainter::setFont()设置文字所使用的字体,使用QPainter::fontInfo()函数可以获取字体的信息,它返回QFontInfo类对象…

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

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

Java 基于Spring AI RAG组件做AI智能问答_rag检索增强_AI智能问答

基于RAG技术构建高效Java智能问答客服机器人 基于RAG&#xff08;Retrieval-Augmented Generation&#xff09;技术&#xff0c;可以构建高效的Java智能问答客服机器人。首先&#xff0c;通过向量化处理将Word格式的问答QA文档转换为机器可理解的形式&#xff0c;并存储于Vect…

顶刊算法 | 鱼鹰算法OOA-BiTCN-BiGRU-Attention多输入单输出回归预测(Maltab)

顶刊算法 | 鱼鹰算法OOA-BiTCN-BiGRU-Attention多输入单输出回归预测&#xff08;Maltab&#xff09; 目录 顶刊算法 | 鱼鹰算法OOA-BiTCN-BiGRU-Attention多输入单输出回归预测&#xff08;Maltab&#xff09;效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实…

Redis+Caffeine 多级缓存数据一致性解决方案

RedisCaffeine 多级缓存数据一致性解决方案 背景 之前写过一篇文章RedisCaffeine 实现两级缓存实战&#xff0c;文章提到了两级缓存RedisCaffeine可以解决缓存雪等问题也可以提高接口的性能&#xff0c;但是可能会出现缓存一致性问题。如果数据频繁的变更&#xff0c;可能会导…

单片机学习笔记 12. 定时/计数器_定时

更多单片机学习笔记&#xff1a;单片机学习笔记 1. 点亮一个LED灯单片机学习笔记 2. LED灯闪烁单片机学习笔记 3. LED灯流水灯单片机学习笔记 4. 蜂鸣器滴~滴~滴~单片机学习笔记 5. 数码管静态显示单片机学习笔记 6. 数码管动态显示单片机学习笔记 7. 独立键盘单片机学习笔记 8…

6.824/6.5840(2024)环境配置wsl2+vscode

本文是经过笔者实践得出的最速の环境配置 首先&#xff0c;安装wsl2和vscode 具体步骤参见Mit6.s081环境配置踩坑之旅WSL2VScode_mit6s081-CSDN博客 接下来开始为Ubuntu(笔者使用的版本依然是20.04)配置go的相关环境 1、更新Ubuntu的软件包 sudo apt-get install build-es…

【排序用法】.NET开源 ORM 框架 SqlSugar 系列

&#x1f4a5; .NET开源 ORM 框架 SqlSugar 系列 &#x1f389;&#x1f389;&#x1f389; 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列…

「Mac畅玩鸿蒙与硬件38」UI互动应用篇15 - 猜数字增强版

本篇将带你实现一个升级版的数字猜谜游戏。相比基础版&#xff0c;新增了计分和历史记录功能&#xff0c;用户可以在每次猜测后查看自己的得分和猜测历史。此功能展示了状态管理的进阶用法以及如何保存和显示历史数据。 关键词 UI互动应用数字猜谜状态管理历史记录用户交互 一…

040集——CAD中放烟花(CAD—C#二次开发入门)

效果如下&#xff1a; 单一颜色的烟花&#xff1a; 渐变色的火花&#xff1a; namespace AcTools {public class HH{public static TransientManager tm TransientManager.CurrentTransientManager;public static Random rand new Random();public static Vector3D G new V…

【机器学习】分类任务: 二分类与多分类

二分类与多分类&#xff1a;概念与区别 二分类和多分类是分类任务的两种类型&#xff0c;区分的核心在于目标变量&#xff08;label&#xff09;的类别数&#xff1a; 二分类&#xff1a;目标变量 y 只有两个类别&#xff0c;通常记为 y∈{0,1} 或 y∈{−1,1}。 示例&#xff…

Python实现网站资源批量下载【可转成exe程序运行】

Python实现网站资源批量下载【可转成exe程序运行】 背景介绍解决方案转为exe可执行程序简单点说详细了解下 声明 背景介绍 发现 宣讲家网 的PPT很好&#xff0c;作为学习资料使用很有价值&#xff0c;所以想下载网站的PPT课件到本地&#xff0c;但是由于网站限制&#xff0c;一…

基于Matlab卡尔曼滤波的GPS/INS集成导航系统研究与实现

随着智能交通和无人驾驶技术的迅猛发展&#xff0c;精确可靠的导航系统已成为提升车辆定位精度与安全性的重要技术。全球定位系统&#xff08;GPS&#xff09;和惯性导航系统&#xff08;INS&#xff09;在导航应用中各具优势&#xff1a;GPS提供全球定位信息&#xff0c;而INS…