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

news2024/11/25 8:19:55

目录

一、为什么要做 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

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

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

相关文章

人工智能系统将家用机器人的解决问题技能提高了80%

麻省理工学院的研究人员开发了PIGINet,这是一个新系统,旨在有效地提高家用机器人解决问题的能力,将规划时间缩短50-80%。 在正常情况下,家用机器人遵循预定义的执行任务的配方,这并不总是适合多样化或不断变化的环境。…

指针面试题详解

目录 前言(数组名的总结): 一、int 型数组和 sizeof 的组合 sizeof计算原理 二、char类型和strlen()组合 三、char*类型和sizeof()组合(有 \0 版本) 四、char*类型和…

【干货】Mysql解决中文乱码

登录数据库后,选择数据库然后执行 MariaDB [test]> status; -------------- mysql Ver 15.1 Distrib 5.5.68-MariaDB, for Linux (x86_64) using readline 5.1Connection id: 6 Current database: test Current user: rootlocalhost SSL: …

开源人力资源管理系统OrangeHRM

什么是 OrangeHRM ? OrangeHRM 是一个全面的人力资源管理(HRM) 系统,它包含任何企业所需的所有基本功能。该软件旨在支持任何规模的团队,包括初创企业、中小企业以及大型跨国组织。 你也可以去官方的演示站点进行体验 网址:https…

【Java】一文学透四种内部类|保姆级详解,一看就会

文章目录 一、什么是内部类?二、内部类的分类2.1:成员内部类(实例内部类)2.1.1:定义:2.1.2:特性2.1.3:实现原理:2.1.4:应用场景: 2.2:…

字节跳动-抖音支付大量招聘实习生

字节跳动-抖音支付大量招聘实习生 字节跳动-抖音支付大量招聘实习生 要求:2024年6月毕业且有时间来实习(大于3个月)的在校学生(本三,研二),日常和暑期都有转正机会~ 职位描述&…

WPF 自定义控件完成库容表盘显示效果

先看一下显示效果: 需要注意的地方有以下几点: 表盘的刻度分部,长刻度和短刻度显示。在数值80W时,需要更改刻度盘的颜色渐变。在数值80W时,更改库容总数背景的显示,也是颜色渐变。刻度盘控件属性定义&…

印刷企业如何利用MES管理系统实现智能计划排产

在数字化时代,印刷企业面临着日益激烈的市场竞争和不断攀升的成本压力。为了提高生产效率和质量,印刷企业需要采用先进的生产管理系统。其中,MES生产管理系统已成为实现智能计划排产的重要工具。本文将探讨如何利用印刷MES管理系统实现印刷企…

界面控件DevExtreme PivotGrid,拥有新的HTML编码体验!

虽然DevExtreme刚刚发布了v23.1,但今天我们仍然要继续总结一下之前的主要更新(v22.2)中发布的一些与DevExtreme PivotGrid(透视网格)组件相关的重要特性。 DevExtreme拥有高性能的HTML5 / JavaScript小部件集合&#…

Django + Bootstrap - 【echart】 统计图表进阶使用-统计用户日活日增、月活月增等数据(二)

一. 前言 Bootstrap是一个流行的前端框架,而ECharts是一个流行的可视化库。 Bootstrap可以用来设计网站和应用程序的用户界面,而ECharts可以用来创建交互式和可视化的图表。 chart.js中文文档:http://www.bootcss.com/p/chart.js/docs/ 二. …

手把手教你搭建SpringCloud项目(六)Eureka实现服务发现

一、服务发现简介 各个微服务在启动时,将自己的网络地址等信息注册到服务发现组件上(eureka,zookeeper,Consul),服务发现组件会存储这些信息。服务消费者会从服务发现组件查询服务提供者的网络地址,然后根据该地址调用服务提供者的接口。各个微服务与服务…

centos升级龙蜥

centos升级龙蜥 龙蜥简介龙蜥官方社区centos升级龙蜥首先确认自己的centos版本下载迁移镜像源安装epel源迁移工具安装i686包查看执行迁移脚本结果查看重启机器查看系统信息 龙蜥简介 2021年10月19日的大会上,阿里云发布全新操作系统“龙蜥”并宣布开源。龙蜥操作系…

SAP与顺丰快递接口签名验证加密ABAP程序例子(MD5加密、转换为Base64字符串) <转载>

原文链接:http://www.baidusap.com/abap/7408 1, 顺丰平台数字签名简介 SAP系统和顺丰快递平台中的API接口对接时,需要将传输的JSON字符串进行数字签名加密。数字签名具体使用的是MD5方式,格式如下:msgData(业务报文&a…

DOM编程

DOM编程 DOM树: 获取DOM对象的方式: 通过id直接获取 id禁止使用,因为项目都是css、html、js分离的 2、通过API,doucument.getElementById 3、通过class,doucument.getElementsByClassName 4、通过标签名称&#xff0…

【框架篇】Bean作用域和生命周期

Bean作用域和生命周期 一,Bean作用域 Bean作用域指的是在Spring框架中,定义了Bean实例的创建和销毁方式,以及可以访问该实例的范围,并决定了每次通过容器获取Bean时返回的是同一个实例还是不同的实例。 1.1,Bean作用…

mysql 2 -- 数据库基本操作、数据表的操作、mysql查询操作

一、数据库基本操作 1、数据库的登录及退出 连接数据库: mysql -u用户名 -h主机地址(省略代表本机) -p 密码(格式为123...);注: 刚下载安装的时候需要通过管理员进入 退出数据库,以下三种方式都可以: exit quit …

Spring:表达式语言

Spring EL 概述使用概述 Spring 表达式(Spring EL) 是一种功能强大的表达式语言,以 #{ 表达式 } 作为定界符,用于在运行时对对象进行访问和操作。通过使用 Spring 表达式达到简化开发、减少逻辑或配置的编写的目的。 使用 Spring EL 主要可以引用 bean ,调用其属性和方…

苹果手机备忘录如何导入新手机?手机备忘录怎么转移?

一般来说,大多数手机用户更换手机的频率是3—5年,在一部手机使用了几年之后,就会出现内存不足、系统卡顿、电池续航时间较短等问题,这时候就需要更换新的手机了。有不少苹果手机用户在更换新手机的时候,都很发愁一个问…

Hugging News #0717: 开源大模型榜单更新、音频 Transformers 课程完成发布!

每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新、社区活动、学习资源和内容更新、开源库和模型更新等,我们将其称之为「Hugging News」。本期 Hugging News 有哪些有趣的消息&#xff0…

TypeScript 学习笔记(六):索引签名类型、映射类型

一、索引签名类型 1. 索引类型查询操作符 keyof keyof可以用于获取某种类型的所有键,其返回类型是联合类型。 interface Info {name: string;age: number; } let infoProp: keyof Info; infoProp "name"; infoProp "age"; infoProp "…