CI/CD 的原理

一、CI/CD 的概念

CI/CD是一种软件开发流程,旨在通过自动化和持续的集成、测试和交付实现高质量的软件产品。
CI(Continuous Integration)持续集成
目前主流的开发方式是协同开发,即多位开发人员同事处理同意应用不同模块或功能。
如果企业在同一时间将所有分支代码集成在一起,那么将难以避免的出现代码冲突问题,从而导致效率低下。
而CI可以帮助开发者更方便地将代码合并到主分支。当开发人员将代码合并到主分支时,系统会自动对这些更改进行自动化测试,如果发现这些代码存在问题,CI可以更加轻松和快速地修复这些问题。

CD(Continuous Delivery)持续交付
在CI完成了集成工作之后,持续交付便可以自动将已验证的代码发布到对应的存储库。
持续交付旨在建议一个可以随时将开发环境中的功能部署到生产环境的代码库。

CD(Continuous Deployment)持续部署
对于一个完整、成熟的 CI/CD 管道来说,最后的阶段是持续部署。
它是作为持续交付的延伸,持续部署可以自动将应用发布到生产环境。
实际上,持续部署意味着开发人员对应用的改动,在编写完成后的几分钟内就能及时生效(前提是它通过了自动化测试)。这更加便于运营团队持续接收和整合用户反馈。
总而言之,所有这些 CI/CD 的关联步骤,都极大地降低了应用的部署风险。
不过,由于还需要编写自动化测试以适应 CI/CD 管道中的各种测试和发布阶段,因此前期工作量还是很大的。

二、CI/CD 的核心流程

自动构建:这个过程通常指使用构建工具(如 Maven、Gradle 等)对代码进行编译、打包和生成可执行文件等操作。构建工具需要与版本控制系统配合使用,当有新的代码提交时,构建工具会自动触发构建操作。

自动化测试:这个过程通常指使用测试框架(如 JUnit、TestNG 等)对代码进行单元测试、集成测试、功能测试和性能测试等操作。测试框架需要与构建工具配合使用,当构建成功后,测试框架会自动运行相应的测试用例,并生成测试报告。

自动化部署:这个过程通常指使用部署工具(如 Ansible、Puppet、Chef 等)将构建好的软件包部署到目标环境中。部署工具需要与测试框架配合使用,当测试通过后,部署工具会自动将新版本的软件部署到生产环境中。

自动化监控:这个过程通常指使用监控工具(如 Nagios、Zabbix、Prometheus 等)对部署在生产环境中的应用程序进行监控和故障排查。监控工具可以对系统资源、应用程序性能、日志等方面进行监控,并提供报警、自愈等功能。

三、CI/CD的重要性

快速交付:CI/CD减少了手动干预,加速了代码的构建、测试和部署,缩短了交付周期。
错误减少:自动化测试和部署减少了人为错误的风险,提高了软件质量。
持续反馈:CI/CD流程提供了快速的反馈,使开发者能够快速识别和修复问题。

四、CI 和 CD 有什么区别

CI/CD 中的“CI”始终指持续集成,它属于开发人员的自动化流程。成功的 CI 意味着应用代码的新更改会定期构建、测试并合并到共享存储库中。该解决方案可以解决在一次开发中有太多应用分支,从而导致相互冲突的问题。
CI/CD 中的“CD”指的是持续交付和/或持续部署,这些相关概念有时会交叉使用。两者都事关管道后续阶段的自动化,但它们有时也会单独使用,用于说明自动化程度。

持续交付(第一种CD)通常是指开发人员对应用的更改会自动进行错误测试并上传到存储库(如 GitHub 或容器注册表),然后由运维团队将其部署到实时生产环境中。这旨在解决开发和运维团队之间可见性及沟通较差的问题。因此,持续交付的目的就是确保尽可能减少部署新代码时所需的工作量。
持续部署(另一种“CD”)指的是自动将开发人员的更改从存储库发布到生产环境,以供客户使用。它主要为了解决因手动流程降低应用交付速度,从而使运维团队超负荷的问题。持续部署以持续交付的优势为根基,实现了管道后续阶段的自动化。

CI/CD 既可能仅指持续集成和持续交付构成的关联环节,也可以指持续集成、持续交付和持续部署这三项构成的关联环节。更为复杂的是,有时“持续交付”也包含了持续部署流程。
归根结底,我们没必要纠结于这些语义,您只需记得 CI/CD 其实就是一个流程(通常形象地表述为管道),用于实现应用开发中的高度持续自动化和持续监控。

五、常用CI/CD工具

1. Jenkins

开源,基于Java开发的一种持续集成工作,用于监控持续重复的工作,旨在提供一个开放易用的软件平台。
特点
1) 安装方便,直接通过安装包安装。
2) 配置简单,可以通过Web界面轻松地设置和配置,提供动态错误检查和内置帮助。
3) 插件丰富。
4) 可扩展,可以通过插件架构进行扩展。
5) 分布式,可以在多台机器上发布工作,帮助用户在多个平台上更快地驱动构建、测试和部署。
在这里插入图片描述

2. Travis CI

托管的持续继承服务,适用于GitHub仓库。
最初开源,多年后转为闭源,专注于CI工作,通过自动化测试和警报系统提高构建过程的效能。
特点
1) 使用YAML文件配置。
2) 基于云。
3) 支持Docker运行测试。
4) 开箱即用支持更多语言。
5) 支持构建矩阵。
6) 开源项目免费计划。
缺点
1) 价格高,没有免费的企业方案
在这里插入图片描述

3. GitLab CI/CD

集成在GitLab中,支持从源代码管理到部署的全流程。
除了测试和构建项目之外,该工具还可以将build部署到基础设施中,而且只要了解各代码段的位置,就能对其开展针对性追踪。

特点
1) 使用YAML文件配置。
2) 继承了GitLab管理的Git仓库,可直接执行GitLab提供的CI/CD管道。
3) 可以基于Docker容器和Kubernetes集群等运行环境。
4) 可以使用共享和分布式运行策略,以调高性能和可靠性。
5) 采用分布式架构来降低压力和提高容错能力。
6) 通过容器化部署来简化运维和降低故障率。
在这里插入图片描述

4. TeamCity

是Java中基于服务器的CI/CD管道工具。由JetBrains开发和维护,可以安装在Windows和Linux服务器上。

特点
1) 支持各种版本呢控制系统。
2) 用户管理简单可靠。
3) 与VS、IntelliJ Concept等IDE简单集成。
缺点
1) 输出日志对用户不友好。
2) 很难手机不同项目的状态。
在这里插入图片描述

5. Circle CI

这是一款基于云的工具,可以自动执行集成和部署任务,适用于为开源项目和大型项目实现CI/CD。
官网
特点
1) 基于云,同时也提供了本地解决方案,允许在私有云或数据中心运行。
2) 商业账户也有免费计划。
3) 可以通过SSH模式访问容器并进行自己的检查。
4) 使用方便,只需要很少的配置。
5) 会检查第三方依赖项,缓存必要的安装内容,而不是持续安装所需的环境。
缺点
1) 仅支持两个版本的Ubuntu免费(12.04和14.04)。
2) 基于云,所以若其停止支持某个软件,将无法被阻止。
3) 开箱即用仅支持以下语言:Go(Golang), Haskell, Java, PHP, Python, Ruby/Rails, Scala。
在这里插入图片描述

6. Bamboo

Bamboo是一种CI工具,由Atlassian开发,提供了在单个窗口中执行、测试和发布的工具。
特点
1) 内置Jira Software和Bitbucket Server集成
2) 内置Git分支工作流程
3) 提供REST API
在这里插入图片描述

7. GoCD

GoCD是来自Thoughtworks的开源持续继承服务器,与其他CI/CD工具相比,他的主要区别在于VSM功能。
VSM跨Pipeline的完整端到端视图,他成功地将其映射到“部署Pipeline”或“持续交付Pipeline”的概念。

特点
1) 专注于持续交付
2) 支持插件
3) 易于定制
在这里插入图片描述

8. CodeShip

这是一个托管的持续继承平台,如果公司使用GitHub进行版本控制系统,使用CodeShip可以大大提高效率,主要原因是他能够直接从GitHub项目进行测试、build和部署。

特点
1) 提供分布式构建环境。
2) 可以与云平台无缝集成。
3) 与Docker紧密集成。
缺点
1) 扩展性受限制。
2) 社区支持小。
在这里插入图片描述

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

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

相关文章

常见大气校正模型及6S模型安装部署【20241028】

⛄常见大气校正模型 大气校正是遥感图像标准化处理的重要环节,消除太阳辐射传输过程中大气对于遥感图像的影响,提高影像的清晰度,获取地物真实的光谱信息。由于大气条件较为复杂,且随区域地理分布和观测时间是动态变化的&#xf…

map 和 set 的使用

文章目录 一.序列式容器和关联式容器二. set 系列的使用1. set 和 multiset 参考文档2. set 类介绍3. set 的构造和迭代器4. set 的增删查5. insert 和迭代器遍历使用样例6. find 和 erase 使用样例7. multiset 和 set 的差异 三. map 系列的使用1. map 和 multimap参考文档2. …

区块链可投会议CCF A--ICDE 2025 截止11.25 附2024录用数

Conference: IEEE International Conference on Data Engineering (ICDE) CCF level:CCF A Categories:Database/Data Mining/Content Retrieval Year:2025 Conference time: May 19-23, 2025 录用数:…

SLAM:未来智能科技的核心——探索多传感器融合的无限可

前言 作为2024年刚入学的研一新生,我初步选择了SLAM(Simultaneous Localization and Mapping,即同时定位与地图构建)作为我的研究方向。虽然在理论学习上已经有了一些基础,但目前的我并没有太多的实践经验。这让我在面…

Black Basta 勒索软件冒充 Microsoft Teams 的 IT 支持人员入侵网络

BlackBasta 勒索软件行动已将其社会工程攻击转移到 Microsoft Teams,伪装成公司帮助台联系员工以协助他们进行正在进行的垃圾邮件攻击。 Black Basta 是一个勒索软件行动,自 2022 年 4 月起活跃,并对全球数百起企业攻击负责。 2022 年 6 月…

Java语言-接口(下)

目录 1. 接口使用实例 1.1 给对象数组排序 1.2 Clonable接口和深拷贝 Cloneable 浅拷贝 深拷贝 1.3 抽象类和接口的区别 2. Object类 2.1 Object类的介绍 2.2 toString() 2.3 equals() 2.4 hashcode() 1. 接口使用实例 1.1 给对象数组排序 现有一个学生类&#…

Let‘s Verify Step by Step(openai-o1论文技术调研)

Let’s Verify Step by Step openai的经典论文,发布于2023年5月31日,为当前openai-o1奠定了技术基础,同时开源了PRM800K数据集,为开源社区贡献了十分宝贵的参考 paper原文链接 : https://arxiv.org/abs/2305.20050 论文概述 当前…

VUE, element-plus, table分页表格列增加下拉筛选多选框,请求后台

简介 为了方便表格查询时可以筛选列的值,需要给列增加筛选框(多选框),element-plus提供了列的filter字段,但是基于表格数据的筛选,不会重新请求后台,而且当前表格数据有多少个条目,…

Makefile Npm

还是习惯强类型语法: typescript 不错 vue 非常好的模组 也是很好的学习模板 编译完才6MB 相当可以了 时代发展有点快 导入echarts 模块编译完才1.7MB 好用 <script> import {VaButton, VaInput} from "vuestic-ui";export default {components: {VaInput, VaB…

20241028在荣品PRO-RK3566开发板的预置Android13下用iperf3测试AP6256的WIFI网速

20241028在荣品PRO-RK3566开发板的预置Android13下用iperf3测试AP6256的WIFI网速 2024/10/28 18:17 荣品PRO-RK3566开发板作为服务器端&#xff1a; 笔记本电脑作为客户端。 接公司的网络。 在笔记本电脑的ubuntu20.04下&#xff0c;通过nethogs实测iperf3的发送速度大概是10MB…

Bi-LSTM-CRF实现中文命名实体识别工具(TensorFlow)

项目源码获取方式见文章末尾&#xff01; 回复暗号&#xff1a;13&#xff0c;免费获取600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 **《------往期经典推荐------》**项目名称 1.【MobileNetV2实现实时口罩检测tensorflow】 2.【卫星图像道路检测DeepLabV3P…

【ArcGIS Pro实操第4期】绘制三维地图

【ArcGIS Pro实操第4期】绘制三维地图 ArcGIS Pro绘制三维地图-以DEM高程为例参考 如何使用ArcGIS Pro将栅格数据用三维的形式进行表达&#xff1f;在ArcGIS里可以使用ArcScene来实现&#xff0c;ArcGIS Pro实现原理跟ArcScene一致。由于Esri未来将不再对ArcGIS更新&#xff0c…

Python酷库之旅-第三方库Pandas(174)

目录 一、用法精讲 801、pandas.Categorical类 801-1、语法 801-2、参数 801-3、功能 801-4、返回值 801-5、说明 801-6、用法 801-6-1、数据准备 801-6-2、代码示例 801-6-3、结果输出 802、pandas.Categorical.from_codes方法 802-1、语法 802-2、参数 802-3、…

2.5 塑性力学—应变状态

个人专栏—塑性力学 1.1 塑性力学基本概念 塑性力学基本概念 1.2 弹塑性材料的三杆桁架分析 弹塑性材料的三杆桁架分析 1.3 加载路径对桁架的影响 加载路径对桁架的影响 2.1 塑性力学——应力分析基本概念 应力分析基本概念 2.2 塑性力学——主应力、主方向、不变量 主应力、主…

在房价涨声一片中,购房者更要看好钱袋,千万不要冲动入坑!

近几个月以来诸多媒体都传出房价上涨的好消息&#xff0c;二手房东也连连传出反价的消息&#xff0c;似乎房价真的到底了&#xff0c;一些购房者因此可能被市场的波动而冲动买房&#xff0c;笔者认为这个时候反而要更慎重地看待房价。 房价的低点确实很难预测&#xff0c;不过1…

单链表OJ题(2):反转链表、找中间节点

目录 1.反转链表 反转链表总结&#xff1a; 2.链表的中间节点&#xff08;快慢指针法&#xff09; 快慢指针法总结 1.反转链表 在这道题中&#xff0c;我们需要把一个单链表反转它们的指向&#xff0c;这里&#xff0c;我们给出了一个好理解的简单解法&#xff0c;就是用三…

C++ 日志管理 spdlog 使用笔记

文章目录 Part.I IntroductionChap.I 预备知识Chap.II 常用语句 Part.II 使用Chap.I 简单使用Chap.II 自定义日志格式 Part.III 问题&解决方案Chap.I 如果文件存在则删除 Reference Part.I Introduction spdlog 是一个开源的 C 日志管理工具&#xff0c;Git 上面的地址为 …

在html中引用unpkg的vue3,v-model无法绑定方法

如果用下面代码引用vue使用&#xff0c;则注意v-model无法绑定方法。 <script src"https://unpkg.com/vue3/dist/vue.global.js"></script> 例如&#xff1a; <span>方法-全名&#xff1a;</span><input type"text" v-model&…

如何将原本打开Edge呈现出的360浏览器,更换成原本的Edge页面或者百度等其他页面

每次打开Edge浏览器&#xff0c;都会呈现出360浏览器的页面&#xff0c;很烦。以下将说明如果将呈现出的360浏览器&#xff0c;更换成原本的Edge页面或者百度等其他页面。 1.找到你的控制面板&#xff0c;点击卸载程序。 2. 找到360安全卫士&#xff0c;右键单击更改/卸载。 3…

【深度学习|地学应用】人工智能技术的发展历程与现状:探讨深度学习在遥感地学中的应用前景

【深度学习|地学应用】人工智能技术的发展历程与现状&#xff1a;探讨深度学习在遥感地学中的应用前景 【深度学习|地学应用】人工智能技术的发展历程与现状&#xff1a;探讨深度学习在遥感地学中的应用前景 文章目录 【深度学习|地学应用】人工智能技术的发展历程与现状&…