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) 社区支持小。

相关文章:
CI/CD 的原理
一、CI/CD 的概念 CI/CD是一种软件开发流程,旨在通过自动化和持续的集成、测试和交付实现高质量的软件产品。 CI(Continuous Integration)持续集成 目前主流的开发方式是协同开发,即多位开发人员同事处理同意应用不同模块或功能。 如果企业在同一时间将…...
进一步认识ICMP协议
在日常工作中,我们经常需要判断网络是否连通,相信大家使用较多的命令就是 ping啦。ping命令是基于 ICMP 协议来实现的,那么什么是 ICMP 协议呢?ping命令又是如何基于 ICMP 实现的呢? 今天这篇文章,我们就来…...
NUUO网络视频录像机upload.php任意文件上传漏洞复现
文章目录 免责声明漏洞描述搜索语法漏洞复现nuclei修复建议 免责声明 本文章仅供学习与交流,请勿用于非法用途,均由使用者本人负责,文章作者不为此承担任何责任 漏洞描述 NUUO网络视频录像机(Network Video Recorder࿰…...
WebGL 3D基础
1. 归一化函数 对一个向量进行归一化处理,即调整向量的模长(长度)为1,同时保持其方向不变。 // 归一化函数 function normalized(arr) {let sum 0;for (let i 0; i < arr.length; i) {sum arr[i] * arr[i];}const middle …...
Docker 部署MongoDb
1. 编写docker-compose.conf 文件 version: 3 services:mongo:image: mongo:latest # 指定 MongoDB 版本,确保 > 3.6container_name: mongo-replicarestart: alwayscommand: ["mongod", "--replSet", "rs0", "--oplogSize&…...
【Hadoop】hadoop的路径分不清?HDFS路径与本地文件系统路径的区别
/usr/local/hadoop /user/hadoop /home/hadoop/ 这里有些路径名很相似,帮我区分? 在Hadoop生态系统中,理解文件存储的位置对于有效管理数据至关重要。Hadoop分布式文件系统(HDFS)提供了一个高度可靠的存储系统…...
倪师学习笔记-天纪-易经八卦
一、简介 卦代表事情,爻代表时机,三爻为一卦八卦对应的天相,六十四卦对应人间事 二、八卦性 1、乾 天父亲向下看,无所求,雄心万丈始终如一,贞,坚心,专心至刚,天威&am…...
自动驾驶性能分析时,非常有用的两个信息
自动驾驶的关键路径如下,传感器的数据发送给感知模块;感知模块根据传感器数据来确定车辆所处的环境,比如前方有没有障碍物,是不是和车道线保持着适当的距离等;感知处理之后的数据传递给规控模块,规控根据车…...
数据结构 - 并查集
文章目录 一、并查集原理二、并查集实现三、并查集的应用 一、并查集原理 在一些应用问题中,需要将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个单元素集合,然后按一定的规律将归于同一组元素的集合合并。在此过程中要反复…...
canvas基础+应用+实例
文章目录 Canvas基础知识要点一、基本概念二、常用参数三、实例四、场景应用说明完结 Canvas基础知识要点 一、基本概念 Canvas是HTML5中的一个标签,用于在网页上通过JavaScript绘制图形、动画等。它提供了一个空白的、基于像素的绘图区域,就像一块画布…...
Linux命令 用户操作简介
目录 1. 添加新的用户账号 2. 删除用户账号 3. 修改用户账号 4. 用户口令的管理 示例汇总 添加新用户 删除用户 修改用户信息 更改用户口令 在 Linux 系统中,用户管理是一项重要的任务,包括添加新用户、删除用户、修改用户信息以及管理用户口令…...
大语言模型的Scaling Law【Power Low】
NLP-大语言模型学习系列目录 一、注意力机制基础——RNN,Seq2Seq等基础知识 二、注意力机制【Self-Attention,自注意力模型】 三、Transformer图文详解【Attention is all you need】 四、大语言模型的Scaling Law【Power Low】 文章目录 NLP-大语言模型学习系列目录一、什么是…...
windows环境下,使用docker搭建redis集群
参考: https://blog.csdn.net/weixin_46594796/article/details/137864842 https://www.cnblogs.com/niceyoo/p/14118146.html 史上最详细Docker搭建Redis Cluster集群环境 值得收藏 每步都有图,不用担心学不会-腾讯云开发者社区-腾讯云 一、基础环境描述 宿主机:192.168…...
Python(pandas库3)
函数 随机抽样 语法: n:要抽取的行数 frac:抽取的比例,比如 frac0.5,代表抽取总体数据的50% axis:示在哪个方向上抽取数据(axis1 表示列/axis0 表示行) 案例: 输出结果都为随机抽取。 空…...
WPF+MVVM案例实战(十)- 水波纹按钮实现与控件封装
文章目录 1、运行效果1、封装用户控件1、创建文件2、依赖属性实现2、使用封装的按钮控件1.主界面引用2.按钮属性设置3 总结1、运行效果 1、封装用户控件 1、创建文件 打开 Wpf_Examples 项目,在 UserControlLib 用户控件库中创建按钮文件 WaterRipplesButton.xaml ,修改 Us…...
数据结构————map,set详解
今天带来map和set的详解,保证大家分清楚 一,概念 map和set是一种专门用来搜索的容器或数据结构 map能存储两个数据类型,我们称之为<key-value>模型 set只能存储一个数据类型,我们称之为纯<key>模型 它们的效率都非…...
fdisk - Linux下的磁盘分区利器
文章目录 前言一、安装和启动二、基本命令2.1 查看分区表2.2 删除分区2.3 创建新分区2.4 更改分区类型2.5 其他指令 三、注意事项四、其他相关工具 前言 在Linux系统中,磁盘管理是维护系统性能和数据安全的重要环节。fdisk 是一个强大的命令行工具,专门…...
or-tools优化库记录
介绍 Or-tools是谷歌人工智能系列的运筹优化包,是一个用于优化的开源软件套件,针对性地解决车辆路线问题、流程优化、整数和线性规划以及约束规划等问题。 官网地使用说明比我详细,我就不多逼逼了 使用说明网址: https://develo…...
M1 Pro MacBook Pro 上的奇遇:Rust 构建失败,SIGKILL 惊魂记
你是否也曾在 M1 Pro MacBook Pro 上遇到过离奇的编译问题?这次我遇到的奇葩问题绝对值得一聊——一个仅在苹果M1 Pro上的神秘构建失败。其他设备都安然无恙,唯独它!折腾了一番,终于让我揭开了这“阴谋”的真相。 问题描述 在运…...
重构商业生态:DApp创新玩法与盈利模式的深度剖析
随着区块链技术的发展,DApp(去中心化应用)正在从实验走向成熟。DApp以去中心化、透明性和不可篡改性为基础,结合智能合约,逐步改变传统商业运作模式,创造新的市场生态。本文将从DApp的独特优势、创新玩法和…...
SAPO Ink UI组件实战:10个常用交互组件快速上手
SAPO Ink UI组件实战:10个常用交互组件快速上手 【免费下载链接】Ink An HTML5/CSS3 framework used at SAPO for fast and efficient website design and prototyping 项目地址: https://gitcode.com/gh_mirrors/ink2/Ink SAPO Ink是一个由SAPO开发的HTML5/…...
Polkadot 正在补完 L1 里没人做过的“垂直 RISC-V 集成“
作者: PaperMoon团队 位 Parity 工程师周末买了一块 RISC-V 板子,把节点跑起来看看会断在哪里。配图是一张工程师的桌子,板子、线、调试器、电源。 很多人会觉得这就是一个 maker culture 风格的小实验。但如果你把过去三年 Polkadot 在 IS…...
StreamCap:让直播录制变得如此简单的跨平台自动录制工具
StreamCap:让直播录制变得如此简单的跨平台自动录制工具 【免费下载链接】StreamCap Multi-Platform Live Stream Automatic Recording Tool | 多平台直播流自动录制客户端 基于FFmpeg 支持监控/定时/转码 项目地址: https://gitcode.com/gh_mirrors/st/StreamC…...
MATLAB图像处理实战:用imfindcircles函数搞定工业零件瑕疵检测(附完整代码)
MATLAB图像处理实战:工业零件瑕疵检测的精准圆识别技术 在工业自动化质检领域,圆形特征的精准检测直接关系到产品质量控制的可靠性。轴承、垫片、齿轮等标准件上的孔洞缺失或尺寸偏差,往往预示着潜在的产品缺陷。传统人工检测不仅效率低下&am…...
从“鸡尾酒会”到手机通话:用生活场景图解CDMA码分多址到底是怎么“听清”你的
鸡尾酒会里的通信密码:用生活场景拆解CDMA如何从噪音中识别你的声音 1. 当鸡尾酒会遇见通信技术 想象你站在一个嘈杂的鸡尾酒会现场,四周充斥着数十人同时进行的对话。神奇的是,尽管声波在空气中混杂叠加,你的大脑却能自动过滤无关…...
41《CAN总线报文周期、抖动与实时性分析》
CAN总线基础:从物理层到数据链路层的核心概念 一、一个让我熬夜的CAN问题 去年调试某款车载ECU时遇到个诡异现象:同一批次的控制器,有的在-20℃低温下CAN通信完全正常,有的却频繁丢帧。示波器挂上去一看,显性电平的下降沿斜率明显变缓,从正常的15ns拖到了40ns。查了三天…...
研发交付管理:资源化与项目制的实践思考
说明(阅读前):本文系 方法论层面的归纳,依据常见软件研发组织实践整理,不涉及任何特定企业的内部制度、人数或薪酬细节;文中角色名称(如研发经理、项目发起人)为 通用称谓࿰…...
Davinci vs. 其他BI工具怎么选?从私有化部署和二次开发角度深度对比
Davinci vs. 主流BI工具技术选型指南:私有化部署与二次开发实战解析 当企业数据量突破TB级时,我们技术团队曾面临一个关键抉择:是继续支付每年六位数的商业BI服务费,还是转向可深度定制的开源方案?这个决策不仅关乎成本…...
AI建站工具从0到1全流程保姆级攻略:零代码生成网站就这么简单
AI建站工具从0到1全流程保姆级攻略:零代码生成网站就这么简单被外包公司几万块的报价劝退?被老板催着下周上线活动页却连域名是什么都不清楚?别慌,用AI建站工具,不写一行代码、不学复杂技术,普通人也能在两…...
别再只怪芯片了!拆解一个智能家居产品,看它的EMC静电防护设计到底哪里出了问题
智能家居静电防护失效分析:从产品拆解看EMC设计盲区 最近一位做智能门锁的创业者朋友向我吐槽:他们的旗舰产品在北方冬季频繁出现用户触摸时死机的情况,售后返修率飙升到15%。拆机检测却显示主板芯片完好,问题究竟出在哪里&#…...
