【基于 GitLab 的 CI/CD 实践】01、GitLab CI/CD 基础概念

目录

一、为什么要做 CI/CD ?

1.1 背景-传统的应用开发发布模式

问题

1.2 持续集成与持续交付

持续集成(CI)

持续交付(CD)

持续部署(CD)

1.3 CI/CD 的价值体现

1.4 推荐常用的 CI/CD 工具

Jenkins

GitLab

二、GitLab CI/CD 功能简介

2.1 GitLab 内置持续集成功能

持续集成(CI)

连续交付(CD)

2.2 GitLab CI/CD 优势

2.3 GitLab CI/CD 特点

2.4 GitLab CI/CD 架构

GitLab CI/CD

GitLab Runner

.gitlab-ci.yml

2.5 GitLab CI/CD 工作原理

三、GitLabCI VS Jenkins

3.1 差异点对比

分支的可配置性

定时执行构建

拉取请求支持

权限管理

存储库交互

插件管理

3.2 优势与劣势

GitLabCI

Jenkins

3.3 实际应用

四、安装部署 GitLab 服务

4.1 rpm 方式

4.2 Docker 方式

4.3 Kubernetes 部署


一、为什么要做 CI/CD ?

1.1 背景-传统的应用开发发布模式

  • 开发团队:在开发环境中完成软件开发,单元测试,测试通过,提交到代码版本管理库。
  • 运维团队:把应用部署到测试环境,供QA团队测试,测试通过后部署生产环境。
  • QA 团队:进行测试,测试通过后通知部署人员发布到生产环境。

问题

  • 错误发现不及时:很多错误在项目的早期可能就存在,到最后集成的时候才发现问题。
  • 人工低级错误发生:产品和服务交付中的关键活动全都需要手动操作。
  • 团队工作效率低:需要等待他人的工作完成后才能进行自己的工作。
  • 开发运维对立: 开发人员想要快速更新,运维人员追求稳定,各自的针对的方向不同。

经过上述问题我们需要作出改变,如何改变?

1.2 持续集成与持续交付

        软件开发的连续方法基于自动执行脚本,以最大程度地减少在开发应用程序时引入错误的机会。从开发新代码到部署新代码,他们几乎不需要人工干预,甚至根本不需要干预。

        它涉及到在每次小的迭代中就不断地构建,测试和部署代码更改,从而减少了基于错误或失败的先前版本开发新代码的机会。

        此方法有三种主要方法,每种方法都将根据最适合您的策略的方式进行应用。

持续集成(CI)

        持续合并开发人员正在开发编写的所有代码的一种做法。通常一天内进行多次合并和提交代码,从存储库或生产环境中进行构建和自动化测试,以确保没有集成问题并及早发现任何问题。

        开发人员提交代码的时候一般先在本地测试验证,只要开发人员提交代码到版本控制系统就会触发一条提交流水线,对本次提交进行验证。

持续交付(CD)

        持续交付是超越持续集成的一步。不仅会在推送到代码库的每次代码更改时都进行构建和测试,而且,作为附加步骤,即使部署是手动触发的,它也可以连续部署。此方法可确保自动检查代码,但需要人工干预才能从策略上手动触发更改的部署。

持续部署(CD)

        通常可以通过将更改自动推送到发布系统来随时将软件发布到生产环境中。持续部署 会更进一步,并自动将更改推送到生产中。类似于持续交付,持续部署也是超越持续集成的又一步。不同之处在于,您无需将其手动部署,而是将其设置为自动部署。部署您的应用程序完全不需要人工干预。 

1.3 CI/CD 的价值体现

  • 尽早反馈,尽早发现错误。

  • 减少集成问题,每次发现问题当时解决,避免问题堆积。

  • 每次更改都能成功发布,降低发布风险。

  • 更加频繁的交付价值,客户反馈。

1.4 推荐常用的 CI/CD 工具

Jenkins

        专业的 CI 工具,可扩展自动化服务器、安装配置简单、丰富的插件库、分布式架构设计、支持所有的平台、可视化的管理页面。  

GitLab

        端到端 DevOps 工具,常用功能:代码审查、问题跟踪、动态订阅、易于扩展、项目 wiki、多角色项目管理、项目代码在线编译预览、CI 工具集成。

  • 提交合并代码集成:通过 git push 进行操作或者在 GitLab Web 页面操作。
  • 发布应用到服务器: 获取制品库中的应用,然后用 salt、ansible 发布部署到服务器。
  • 完全自动化:提交代码 -> 构建部署 -> 发布

二、GitLab CI/CD 功能简介

2.1 GitLab 内置持续集成功能

持续集成(CI)

  • 集成团队中每个开发人员提交的代码到代码存储库中。

  • 开发人员在 Merge 或者 Pull 请求中合并拉取新代码。

  • 在提交或者合并更改到代码存储库之前,会触发了构建,测试和新代码验证的管道。

  • CI 可帮助您在开发周期的早期发现并减少错误。

连续交付(CD)

  • 可通过结构化的部署管道确保将经过 CI 验证的代码交付给您的应用程序。

  • CD 可以将经过验证的代码更快地移至您的应用程序。

        CI/CD 一起可以加快团队为客户和利益相关者交付成果的速度。CI 和 CD 必须无缝协作,以使您的团队快速有效地进行构建,并且对于确保完全优化的开发实践至关重要。

2.2 GitLab CI/CD 优势

  • 开源:CI/CD 是开源 GitLab 社区版和专有 GitLab 企业版的一部分。

  • 易于学习:具有详细的入门文档。

  • 无缝集成:GitLab CI/CD 是 GitLab 的一部分,支持从计划到部署,具有出色的用户体验。

  • 可扩展:测试可以在单独的计算机上分布式运行,可以根据需要添加任意数量的计算机。

  • 更快的结果:每个构建可以拆分为多个作业,这些作业可以在多台计算机上并行运行。

  • 针对交付进行了优化:多个阶段,手动部署, 环境和变量。

2.3 GitLab CI/CD 特点

  • 多平台:Unix,Windows,macOS 和任何其他支持 Go 的平台上执行构建。

  • 多语言:构建脚本是命令行驱动的,并且可以与 Java,PHP,Ruby,C 和任何其他语言一起使用。

  • 稳定构建:构建在与 GitLab 不同的机器上运行。

  • 并行构建:GitLab CI/CD 在多台机器上拆分构建,以实现快速执行。

  • 实时日志记录:合并请求中的链接将您带到动态更新的当前构建日志。

  • 灵活的管道:您可以在每个阶段定义多个并行作业,并且可以 触发其他构建。

  • 版本管道: 一个 .gitlab-ci.yml 文件包含您的测试,整个过程的步骤,使每个人都能贡献更改,并确保每个分支获得所需的管道。

  • 自动缩放:您可以自动缩放构建机器,以确保立即处理您的构建并将成本降至最低。

  • 构建工件:您可以将二进制文件和其他构建工件上载到 GitLab 并浏览和下载它们。

  • Docker 支持:可以使用自定义 Docker 镜像, 作为测试的一部分启动 服务, 构建新的Docker 镜像,甚至可以在 Kubernetes 上运行。

  • 容器注册表: 内置的容器注册表,用于存储,共享和使用容器镜像。

  • 受保护的变量: 在部署期间使用受每个环境保护的变量安全地存储和使用机密。

  • 环境: 定义多个环境。

2.4 GitLab CI/CD 架构

GitLab CI/CD

        GitLab 的一部分,GitLab 是一个 Web 应用程序,具有将其状态存储在数据库中的 API。 除了 GitLab 的所有功能之外,它还管理项目/构建并提供一个不错的用户界面。

GitLab Runner

        是一个处理构建的应用程序。 它可以单独部署,并通过 API 与 GitLab CI/CD一起使用。

.gitlab-ci.yml

定义流水线作业运行,位于应用项目根目录下。

        为了运行测试,我们后面至少需要一个 GitLab 实例、一个 GitLab Runner、一个 gitlab-ci 文件。

2.5 GitLab CI/CD 工作原理

  • 将代码托管到 Git 存储库。

  • 在项目根目录创建 ci 文件 .gitlab-ci.yml ,在文件中指定构建,测试和部署脚本。

  • GitLab 将检测到它并使用名为 GitLab Runner 的工具运行脚本。

  • 脚本被分组为作业,它们共同组成了一个管道

管道状态也会由 GitLab 显示:  

最后,如果出现任何问题,可以轻松地回滚所有更改:  

三、GitLabCI VS Jenkins

  Jenkins 是一个广泛用于持续集成的可视化 web 自动化工具,jenkins 可以很好的支持各种语言的项目构建,也完全兼容 antmavengradle等多种第三方构建工具,同时跟 svngit能无缝集成,也支持直接与知名源代码托管网站,比如 githubbitbucket直接集成,而且插件众多,在这么多年的技术积累之后,在国内大部分公司都有使用 Jenkins

  gitlab-CI是 gitlab8.0之后自带的一个持续集成系统,中心思想是当每一次 push到 gitlab的时候,都会触发一次脚本执行,然后脚本的内容包括了测试,编译,部署等一系列自定义的内容。

  gitlab-CI的脚本执行,需要自定义安装对应 gitlab-runner来执行,代码 push之后,webhook检测到代码变化,就会触发 gitlab-CI,分配到各个 Runner来运行相应的脚本 script。这些脚本有的是测试项目用的,有的是部署用的。

3.1 差异点对比

分支的可配置性

  • 使用 GitLabCI,新创建的分支无需任何进一步配置即可立即使用 CI 管道中的已定义作业。

  • Jenkins 2 基于 gitlab 的多分支流水线可以实现。相对配置来说 gitlab 更加方便一些。

定时执行构建

有时,根据时间触发作业或整个管道会有所帮助。例如,常规的夜间定时构建。

  • 使用 Jenkins 2 可以立即使用。可以在应执行作业或管道的那一刻以 cron 式语法定义。

  • GitLab CI 没有此功能。但是,可以通过一种变通办法来实现:通过 WebAPI 使用同一台或另一台服务器上的 cronjob 触发作业和管道。

        尽管使用 GitLab CI 无法做到这一点,其实如果配置了提交代码即触发流水线,那么最后一次提交的构建在什么时候没有什么不同,反而减少未提交代码的定时构建资源浪费。

拉取请求支持

        如果很好地集成了存储库管理器和 CI / CD 平台,您可以看到请求的当前构建状态。使用这种功能,可以避免将代码合并到不起作用或无法正确构建的主分支中。

  • Jenkins 没有与源代码管理系统进一步集成,需要管理员自行写代码或者插件实现。

  • GitLab 与其 CI 平台紧密集成,可以方便查看每个打开和关闭拉动请求的运行和完成管道。

权限管理

        从存储库管理器继承的权限管理对于不想为每个服务分别设置每个用户的权限的大型开发人员或组织团体很有用。大多数情况下,两种情况下的权限都是相同的,因此默认情况下应将它们配置在一个位置。

  • 由于 GitLab 与 GitLabCI 的深度整合,权限可以统一管理。

  • 由于 Jenkins 2 没有内置的存储库管理器,因此它无法直接在存储库管理器和 CI / CD 平台之间合并权限。

存储库交互

  • GitLab CI 是 Git 存储库管理器 GitLab 的固定组件,因此在 CI / CD 流程和存储库功能之间提供了良好的交互。

  • Jenkins 2 与存储库管理器都是松散耦合的,因此在选择版本控制系统时它非常灵活。此外,就像其前身一样,Jenkins 2 强调了对插件的支持,以进一步扩展或改善软件的现有功能。

插件管理

  • 扩展 Jenkins 的本机功能是通过插件完成的。插件的维护,保护和升级成本很高。

  • GitLab 是开放式的,任何人都可以直接向代码库贡献更改,一旦合并,它将自动测试并维护每个更改。

3.2 优势与劣势

GitLabCI

  • 轻量级,不需要复杂的安装手段。

  • 配置简单,与 gitlab可直接适配。

  • 实时构建日志十分清晰,UI交互体验很好

  • 使用 YAML 进行配置,任何人都可以很方便的使用。

  • 没有统一的管理界面,无法统筹管理所有项目

  • 配置依赖于代码仓库,耦合度没有 Jenkins

Jenkins

  • 编译服务和代码仓库分离,耦合度低

  • 插件丰富,支持语言众多。

  • 有统一的 web管理界面。

  • 插件以及自身安装较为复杂。

  • 体量较大,不是很适合小型团队。

3.3 实际应用

  • GitLabCI 有助于 DevOps 人员,例如敏捷开发中,开发与运维是同一个人,最便捷的开发方式。(小团队)

  • JenkinsCI 适合在多角色团队中,职责分明、配置与代码分离、插件丰富。

四、安装部署 GitLab 服务

GitLab 官方安装方法:GitLab下载安装_GitLab最新中文免费版下载安装-极狐GitLab

4.1 rpm 方式

清华源地址:Index of /gitlab-ce/yum/el7/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

# 下载安装包
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-15.3.3-ce.0.el7.x86_64.rpm

# 安装
yum install -y curl policycoreutils-python openssh-server perl
rpm -ivh gitlab-ce-15.3.3-ce.0.el7.x86_64.rpm

# 编辑站点地址(服务器节点的 ip)
vim /etc/gitlab/gitlab.rb
external_url 'http://192.168.170.133' 

# 重载配置(过程会比较久,耐心等待)
gitlab-ctl reconfigure  

# GitLab 服务控制
gitlab-ctl start      # 启动服务   
gitlab-ctl status     # 查看状态
gitlab-ctl stop       # 停止服务

注:此方式安装的 GitLab 服务是开机自启的服务。 

4.2 Docker 方式

参考官方文档:极狐GitLab Docker 镜像 | 极狐GitLab 

4.3 Kubernetes 部署

参考官方文档:使用 Helm 安装极狐GitLab | 极狐GitLab

下一篇文章:【基于 GitLab 的 CI/CD 实践】02、gitlab-runner 实践_Stars.Sky的博客-CSDN博客 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux内核结构与特性简介

系统调用接口:位于最上层,实现了一些基本的功能,如read和write等系统调用。这是用户空间程序与内核交互的接口,提供了对内核功能的访问。 内核代码:位于系统调用接口之下,可以看作是独立于体系结构的通用内…

linux之Ubuntu系列(四)用户管理 用户和权限 chmod 超级用户root, R、W、X、T、S 软链接和硬链接 shell

r(Read,读取):对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目 录的权限。 w(Write,写入):对文件而言,具有新增、修改文件内容的权限;对目录来说,具有删除、移…

基于单片机快递柜的设计与实现

功能介绍 以51单片机作为主控系统;液晶显示当前信息,最多可存储几十个;按下存储按键液晶显示当前快递柜剩余数量;继电器打开,表示用来放物品;正次按下存储按键将取消存快递,继电器关闭快递柜可用…

Spark编程-使用SparkCore求TopN,Max_Min_Value

简介 使用SparkCore求top5值编程,最大最小值 求订单前五的TOP5值 数据 数据字段如下:orderid,userid,payment,productid 需求如下:从文本文件中读取数据,并计算出前5个payment(订单的付款金额)值 //字段 orderid,userid,payme…

在 3ds Max 中对二战球形炮塔进行建模

推荐: NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 实际上被称为“斯佩里球炮塔”,它被用于二战的B-17和B-24轰炸机。 本教程介绍如何在 3ds Max 中对球形转塔进行建模。建模时,您将使用背景图片作为辅助。首先创建一个低多边形球体。…

视频融合平台EasyCVR登录后通道数据及菜单栏页面显示异常的排查与解决

EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有GB28181、RTSP/Onvif、RTMP等,以及厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等,能对外分发RTSP、RTMP、FLV、HLS、WebRTC等格式的视频流。 有用…

Windows11 C盘瘦身

1.符号链接 将大文件夹移动到其他盘,创建成符号链接 2.修改Android Studio路径设置 1.SDK路径 2.Gradle路径 3.模拟器路径 设置环境变量 ANDROID_SDK_HOME

存量市场下,雅迪的高端化之路举步维艰?

为了让自家的高端产品成功“突围”,雅迪在营销上无所不用其极。 继在央视大楼高调发布后,近日雅迪冠能探索E10完成了力战70吨游艇、无惧24吨雨水冲刷、制霸百公里全地形等极限挑战,“树立起新一代两轮电动车豪华标杆旗舰”。 图源&#xff1…

字节跳动后端面试,笔试部分

var code "7022f444-ded0-477c-9afe-26812ca8e7cb" 背景 笔者在刷B站的时候,看到了一个关于面试的实录,前半段是八股文,后半段是笔试部分,感觉笔试部分的题目还是挺有意思的,特此记录一下。 笔试部分 问…

Jmeter性能测试,通过插件监控服务器资源使用情况

Jmeter作为性能测试的首选工具,那么在性能测试过程中如何方便快捷的监测服务器资源使用情况? 可以通过jmeter 安装"PerfMon(Servers Performance Monitoting)"插件并配合服务端资源监控工具进行实现,详细操作流程如下:…

【微信机器人开发

现在并没有长期免费的微信群机器人,很多都是前期免费试用,后期进行收费,或者核心功能需要付费使用的。 这时如果需要群机器人帮助我们管理群聊,建议大家使有条件的可以自己开发微信管理系统。了解微信群机器人的朋友都知道&#x…

教程 | 如何10秒内一键生成高质量PPT

Hi! 大家好,我是赤辰! 近期新进的学员不少职场小白,对AI工具提效办公很感兴趣,今天火速给大家安排,ChatGPTMindShow强强联合,30秒内快速生成PPT,对于策划小白来说简直是福音呀! 市…

第三方api对接怎么做?淘宝1688api接口怎么对接?

在今天的互联网上,第三方API对接是必不可少的。这种技术将不同的应用程序/服务连接在一起,创造了无限的可能性。 第三方api对接怎么做? 1、与支付公司签约 首先,通过正规的渠道,如支付公司官网或正规服务商&#xf…

Echarts 修改背景颜色、全屏自适应屏幕

修改背景色: 全屏自适应屏幕 首先拿到外面的div的高度 通过DOM获取clientHeight即为无论全屏与否都是DIV的整个高度 在通过高度去做自适应就好了

Redis可视化工具(Redis Desktop Manager)

redis是我们平时开发工作中经常用到的非关系型数据库,常用于做数据缓存,分布式锁等。 为了更方便的使用redi,这里给大家推荐一款可视化工具:Redis Desktop Manager。 1.下载与安装 直接到gihub下载,地址 Release 0.…

搭建Redis主从集群和哨兵

说明:单机的Redis存在许多的问题,如数据丢失问题、高并发问题、故障恢复问题、海量数据的存储能力问题,针对这四个问题,对应解决方式有:数据持久化(参考:http://t.csdn.cn/SSyBi)、搭…

Stable Diffusion学习笔记

一些零散笔记 批量化生产的时候推荐提高生成批次,不建议提高每批数量 灰常好的模型网站 LiblibAI哩布哩布AI-中国领先原创AI模型分享社区 出图效率倍增!47个高质量的 Stable Diffusion 常用模型推荐 - 优设网 - 学设计上优设 关键词Prompt顺序 画质…

16 | 视图:如何实现服务和数据在微服务各层的协作?

目录 服务的协作 1. 服务的类型 2. 服务的调用 微服务内跨层 微服务之间的服务调用 领域事件驱动 3. 服务的封装与组合 基础层 领域层 应用层 用户接口层 4. 两种分层架构的服务依赖关系 松散分层架构的服务依赖 严格分层架构的服务依赖 数据对象视图 基础层 领…

Hugging Face开源库accelerate详解

官网:https://huggingface.co/docs/accelerate/package_reference/accelerator Accelerate使用步骤 初始化accelerate对象accelerator Accelerator()调用prepare方法对model、dataloader、optimizer、lr_schedluer进行预处理删除掉代码中关于gpu的操作&#xff0…

【Zookeeper】

目录 一、Zookeeper 概述1、Zookeeper 定义2、Zookeeper 工作机制3、Zookeeper 特点4、Zookeeper 数据结构5、Zookeeper 应用场景6、Zookeeper 选举机制 二、部署 Zookeeper 集群1.安装前准备1、关闭防火墙2、安装 JDK3、下载安装包 2.安装 Zookeeper1、修改配置文件2、拷贝配置…