当前位置:网站首页>Jenkins - 持续集成介绍(1)
Jenkins - 持续集成介绍(1)
2022-08-08 11:58:00 【有翅膀的猫】
Jenkins - 持续集成介绍(1)
在了解持续集成之前,我们先了解一下,为什么要持续集成? 以及持续集成之前的故事。
1.软件开发的生命周期
软件开发生命周期又叫做SDLC(Software Development Life Cycle),它是集合了计划、开发、测试和部署过程的集合。如下图所示∶
需求分析:我们拿到一个项目,他到底要做一个什么功能,到底要实现什么效果,一般是由公司内部人员提供出来或者第三方客户提供一个需求的文档。
设计:我们一般叫需求设计或者项目设计,在设计阶段,主要是牵扯一些 技术或者部署架构,通俗来说就是 我们这个项目到底要如何去制作,有哪些功能,如何去完成。
实现:可以理解为 编码,一般是由项目经理带领开发人员进行编码实现,那么会根据项目大小或者完成的周期,可能会从几天、几周、几个月去进行一个实现。
测试:测试人员进行代码测试,包括功能测试、代码测试、压力测试等。
进化(维护):进化阶段就是对产品不断的进行改进和维护阶段,根据用户的使用情况,可能需要对某功能进行修改,bug修复、功能增加等。
2.软件开发瀑布模型
瀑布模型是最著名和最常使用的软件开发模型。瀑布模型就是一系列的软件开发过程。它是由制造业繁衍出来的。一个高度化的结构流程在一个方向上流动,有点像生产线一样。在瀑布模型创建之初,没有其它开发的模型,有很多东西全靠开发人员去猜测,去开发。这样的模型仅适用于那些简单的软件开发, 但是已经不适合现在的开发了。
下图对软件开发模型的一个阐述
优势 | 劣势 |
---|---|
简单易用和理解 | 各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量 |
当前一阶段完成后,您只需要去关注后续阶段 | 由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发风险 |
为项目提供了按阶段划分的检查节点 | 瀑布模型的突出缺点是不适应用户需求的变化 |
3.软件的敏捷开发
敏捷开发(Agile Deveiopment) 的核心是迭代开发(lterative Development)与 增量开发(IncrementalDevelopment) .
什么是迭代开发?
对于大型软件项目,传统的开发方式是采用一个大周期(比如一年)进行开发,整个过程就是一次"大开发"; 迭代开发的方式则不一样,它将开发过程拆分成多个小周期,即一次"大开发"变成多次"小开发",每次小开发都是同样的流程,所以看上去就好像重复在做同样的步骤。
举例来说,SpaceX公司想造一个大推力火箭,将人类送到火星。但是,它不是一开始就造大火箭,而是先造一个最简陋的小火箭Falcon 1。结果,第一次发射就爆炸了,直到第四次发射,才成功进入轨道。然后,开发了中型火箭Falcon 9,九年中发射了70次。最后,才开发Falcon 重型火箭。如果SpaceX不采用迭代开发,它可能直到现在还无法上天。
什么是增量开发?
软件的每个版本,都会新增一个用户可以感知的完整功能。也就是说,按照新增功能来划分迭代。
举例来说,房产公司开发一个10栋楼的小区。如果采用增量开发的模式,该公司第一个迭代就是交付一号楼,第二个迭代交付二号楼……每个迭代都是完成一栋完整的楼。而不是第一个迭代挖好10栋楼的地基,第二个迭代建好每栋楼的骨架,第三个迭代架设屋顶…
敏捷开发有什么好处?
①早期交付
敏捷开发的第一个好处,就是早期交付,从而大大降低成本。
还是以上一节的房产公司为例,如果按照传统的"瀑布开发模式",先挖10栋楼的地基、再盖骨架、然后架设屋顶,每个阶段都等到前一个阶段完成后开始,可能需要两年才能一次性交付10栋楼。也就是说,如果不考虑预售,该项目必须等到两年后才能回款。
敏捷开发是六个月后交付一号楼,后面每两个月交付一栋楼。因此,半年就能回款10%,后面每个月都会有现金流,资金压力就大大减轻了。
②降低风险
敏捷开发的第二个好处是,及时了解市场需求,降低产品不适用的风险。
请想一想,哪一种情况损失比较小:10栋楼都造好以后,才发现卖不出去,还是造好第一栋楼,就发现卖不出去,从而改进或停建后面9栋楼?
4.什么是持续集成?
持续集成概念
持续集成(Continuous integration,简称Cl)指的是,频繁地(一天多次)将代码集成到主干。
**持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。**它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。
它绑定 Github 上面的项目,只要有新的代码,就会自动抓取。然后,提供一个运行环境,执行测试,完成构建,反馈运行结果,还能部署到服务器。
持续集成的好处在于,每次代码的小幅变更,就能看到运行结果,从而不断累积小的变更,而不是在开发周期结束时,一下子合并一大块代码。
通过持续集成, 团队可以快速的从一个功能到另一个功能,简而言之,敏捷软件开发很大一部分都要归功于持续集成。
持续集成的流程
根据持续集成的设计,代码从提交到生产,整个过程有以下几步。
- 提交
流程的第一步,是开发者向代码仓库提交代码。所有后面的步骤都始于本地代码的一次提交(commit)。 - 测试(第一轮)
代码仓库对commit操作配置了钩子(hook),只要提交代码或者合并进主干,就会跑自动化测试。 - 构建
通过第一轮测试,代码就可以合并进主干,就算可以交付了。
交付后,就先进行构建(build),再进入第二轮测试。所谓构建,指的是将源码转换为可以运行的实际代码,比如安装依赖,配置各种资源(样式表、JS脚本、图片)等等。 - 测试(第二轮)
构建完成,就要进行第二轮测试。如果第一轮已经涵盖了所有测试内容,第二轮可以省略,当然,这时构建步骤也要移到第一轮测试前面。 - 部署
过了第二轮测试,当前代码就是一个可以直接部署的版本(artifact)。将这个版本的所有文件打包(tar filename.tar * )存档,发到生产服务器。 - 回滚
一旦当前版本发生问题,就要回滚到上一个版本的构建结果。最简单的做法就是修改一下符号链接,指向上一个版本的目录。
持续集成的组成要素
- 一个自动构建过程,从检出代码、编译构建、运行测试、结果记录、测试统计等都是自动完成的,无需人工干预。
- 一个代码存储库,即需要版本控制软件来保障代码的可维护性,同时作为构建过程的素材库,一般使用 SVN或Git。
- 一个持续集成服务器,Jenkins 就是一个配置简单和使用方便的持续集成服务器。
持续集成的好处
1、降低风险,由于持续集成不断去构建,编译和测试,可以很早期发现问题,所以修复的代价就少;
2、对系统健康持续检查,减少发布风险带来的问题;
3、减少重复性工作;
4、持续部署,提供可部署单元包;
5、持续交付可供使用的版本;
6、增强团队信心;
下一章节 会介绍 持续集成工具 Jenkins 的安装,部署和构建
边栏推荐
- Oracle ASM磁盘组使用新存储替换旧存储方案
- 一条SQL在MySQL中是如何执行的
- 安科瑞预付费水电集团物业解决方案-Susie 周
- win10安装Solidworks2016安装出错:solidworks\sldfuncfeat.dll“ 已返回 0x3,如何解决.
- MySQL Dual-Master 双向同步
- 结合“xPlus”探讨软件架构的创新与变革
- 字节跳动资深架构师整理2022年秋招最新面试题汇总:208页核心体系
- ets declarative ui development, how to get the current system time
- Yizhou Financial Analysis | Internet-based small loan platform intensively increased capital; comprehensive evaluation index of bank wealth management subsidiaries released in the first half of the ye
- STM32的内存管理相关(内存架构,内存管理,map文件分析)
猜你喜欢
ets declarative ui development, how to get the current system time
五心红娘6月成功案列
自学脚手架——《热学》 by 李椿(第一,二,三,四,五章)
Jingdong, zhang, director of the cloud wireless products division treasure jingdong cloud wireless treasure close relationship with the open source | the great god, open source BUFF gain strategy revi
C语言详解系列——指针与结构体
安科瑞预付费水电集团物业解决方案-Susie 周
leetcode-636:函数的独占时间
day01 -Web API介绍—DOM 介绍—获取元素—事件基础—操作元素—排他操作—自定义属性操作—节点操作—案例:动态生成表格—创建元素的三种方式(经典面试题)
报错 | Cannot find module ‘@better-scroll/core/dist/types/BScroll‘
写个 shell 玩 数字炸弹
随机推荐
win10安装Solidworks2016安装出错:solidworks\sldfuncfeat.dll“ 已返回 0x3,如何解决.
史上最全JVM性能调优:线程+子系统+类加载+内存分配+垃圾回收
测试开发专栏——序言:总结过去,展望未来
C语言详解系列——指针与结构体
面试突击72:输入URL之后会执行什么流程?
LeetCode_487_最大连续1的个数Ⅱ
PM2 入门(二)
【重构map】【重构filter】【重构Some】【重构reduce方法】【重构flat函数】
十年架构五年生活-08 第一次背锅
One article to understand configuration management (CM)
一文搞懂│XSS攻击、SQL注入、CSRF攻击、DDOS攻击、DNS劫持
哪来的TB级推荐模型
Oracle ASM磁盘组使用新存储替换旧存储方案
报错 | Cannot find module ‘@better-scroll/core/dist/types/BScroll‘
老手也常误用!详解 Go channel 内存泄漏问题
Yizhou Financial Analysis | Internet-based small loan platform intensively increased capital; comprehensive evaluation index of bank wealth management subsidiaries released in the first half of the ye
关于微信小程序体验版获取不到openId的问题
TF-GNN踩坑记录(一)
你的 golang 程序正在悄悄内存泄漏
【cookie 临时存储数据,WebStorage ,sessionStorage】