项目部署之持续集成

news2025/4/19 6:03:52

1. 什么是持续集成

持续集成(Continuous integration, 简称CI)指的是,频繁地(一天多次)将代码集成到主干。

在这里插入图片描述

持续集成的组成要素

一个自动构建过程, 从检出代码、 编译构建、 运行测试、 结果记录、 测试统计等都是自动完成的, 无需人工干预。

一个代码存储库,即需要版本控制软件来保障代码的可维护性,同时作为构建过程的素材库,一般使用SVNGit

一个持续集成服务器,Jenkins就是一个配置简单和使用方便的持续集成服务器。

2. 持续集成的好处

  • 降低风险,由于持续集成不断去构建,编译和测试,可以很早期发现问题,所以修复的代价就少;
  • 对系统健康持续检查,减少发布风险带来的问题;
  • 减少重复性工作;
  • 持续部署,提供可部署单元包;
  • 持续交付可供使用的版本;
  • 增强团队信心;

3. 软件开发生命周期

软件开发生命周期又叫做SDLCSoftware Development Life Cycle),它是集合了计划、开发、测试和部署过程的集合。如下图所示 :

在这里插入图片描述

  • 需求分析

    这是生命周期的第一阶段,根据项目需求,团队执行一个可行性计划的分析。项目需求可能是公司内部或者客户提出的。这阶段主要是对信息的收集,也有可能是对现有项目的改善和重新做一个新的项目。还要分析项目的预算多长,可以从哪方面受益及布局,这也是项目创建的目标。

  • 设计

    第二阶段就是设计阶段,系统架构和满意状态(就是要做成什么样子,有什么功能),和创建一个项目计划。计划可以使用图表,布局设计或者文字的方式呈现。

  • 实现

    第三阶段就是实现阶段,项目经理创建和分配工作给开者,开发者根据任务和在设计阶段定义的目标进行开发代码。依据项目的大小和复杂程度,可以需要数月或更长时间才能完成。

  • 测试

    测试人员进行代码测试 ,包括功能测试、代码测试、压力测试等。

  • 进化

    最后进阶段就是对产品不断的进化改进和维护阶段,根据用户的使用情况,可能需要对某功能进行修改,bug修复,功能增加等。

4. 软件开发瀑布模型

瀑布模型是最著名和最常使用的软件开发模型。瀑布模型就是一系列的软件开发过程。它是由制造业繁衍出来的。一个高度化的结构流程在一个方向上流动,有点像生产线一样。在瀑布模型创建之初,没有其它开发的模型,有很多东西全靠开发人员去猜测,去开发。这样的模型仅适用于那些简单的软件开发, 但是已经不适合现在的开发了。

下图对软件开发模型的一个阐述。

在这里插入图片描述

优势劣势
简单易用和理解各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量。
当前一阶段完成后,您只需要去关注后续阶段。由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发风险。
为项目提供了按阶段划分的检查节点瀑布模型的突出缺点是不适应用户需求的变化。

5. 软件的敏捷开发

  • 什么是敏捷开发?

    敏捷开发(Agile Development) 的核心是迭代开发(Iterative Development) 与增量开发(Incremental Development)。

    一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。

  • 何为迭代开发?

    对于大型软件项目,传统的开发方式是采用一个大周期(比如一年)进行开发,整个过程就是一次"大开发";迭代开发的方式则不一样,它将开发过程拆分成多个小周期,即一次"大开发"变成多次"小开发",每次小开发都是同样的流程,所以看上去就好像重复在做同样的步骤。

    每次只设计和实现这个产品的一部分, 逐步逐步完成的方法叫迭代开发, 每次设计和实现一个阶段叫做一个迭代。在迭代式开发方法中,整个开发工作被组织为一系列的短小的、固定长度(比如一个月)的小项目,被称为一系列的迭代。每一次迭代都包括了需求分析、设计、实现与测试。

  • 何为增量开发?

    软件的每个版本,都会新增一个用户可以感知的完整功能。也就是说,按照新增功能来划分迭代。

    举例来说,房产公司开发一个10栋楼的小区。如果采用增量开发的模式,该公司第一个迭代就是交付一号楼,第二个迭代交付二号楼…每个迭代都是完成一栋完整的楼。而不是第一个迭代挖好10栋楼的地基,第二个迭代建好每栋楼的骨架,第三个迭代架设屋顶…

  • 敏捷开发如何迭代?

    虽然敏捷开发将软件开发分成多个迭代,但是也要求,每次迭代都是一个完整的软件开发周期,必须按照软件工程的方法论,进行正规的流程管理。

在这里插入图片描述

6. 敏捷开发的好处

  • 早期交付

    敏捷开发的第一个好处,就是早期交付,从而大大降低成本。 还是以上一节的房产公司为例,如果按照传统的"瀑布开发模式",先挖10栋楼的地基、再盖骨架、然后架设屋顶,每个阶段都等到前一个阶段完成后开始,可能需要两年才能一次性交付10栋楼。也就是说,如果不考虑预售,该项目必须等到两年后才能回款。 敏捷开发是六个月后交付一号楼,后面每两个月交付一栋楼。因此,半年就能回款10%,后面每个月都会有现金流,资金压力就大大减轻了。

  • 降低产品开发风险

    敏捷开发的第二个好处是,及时了解市场需求,降低产品不适用的风险。 请想一想,哪一种情况损失比较小:10栋楼都造好以后,才发现卖不出去,还是造好第一栋楼,就发现卖不出去,从而改进或停建后面9栋楼?

  • 持续的测试和集成

    每个迭代的敏捷开发,我们都会去不断的来做两件事情,一件就是增加新的功能,另一件就是更改变化的功能需求。新的功能或需求变化总是尽可能频繁地被整合到产品中。有些是在每个迭代周期结束的时候集成, 有些则每天都在这么做。所以,我们在每个迭代的敏捷开发中,都要不断的进行持续的测试和集成工作,以达到给客户交付一个满意,可用的产品。

  • 满足用户不断变化的需求

    满足用户不断变化的需求是软件开发的长期无法解决的难题之一,经典的瀑布模式在一个迭代周期内表现优异,但一旦需求变化,瀑布模式却显得无能为力。敏捷方法满足需求的办法主要通过迭代。在每一次迭代周期结束时,都能交付用户一个可用的、可部署的系统,用户使用并体验该系统并反馈意见,在随后的迭代周期这些意见和需求的其他变化一起在产品中实现和集成。

  • 得到早期用户反馈

    每次迭代周期应尽可能短,以便能及时地处理需求变化和用户反馈。客户反馈的越早,越有助于在下个迭代的敏捷开发中,对客户反馈的意见进行修改。经过几个迭代对用户反馈的修改开发工作,使系统更加趋于完美。

​ 综上所述,敏捷开发和迭代开发相结合的项目开发方式,给我们项目管理带来的好处多多。也是我长期通过项目开实践,在不断学习和总结的中觉得最佳的项目开发方式之一。它对项目成败和最终结果起到决定性因素。因为我觉得它的思想精髓本身就值得我们采用它,它强调的是持续改进,不断完善。这相对于经典的瀑布式开发来说是无法比拟的,经典的瀑布模式虽然在一个迭代周期内表现优异,但一旦需求变化,瀑布模式却显得无能为力。瀑布模式通常会在产品起点与最终结果之间规划出一条直线,然后沿着直线不断往前走。然而当项目到达终点时,用户通常会发现那已经不是他们想要的东西。而敏捷方法则采用小步快跑,每走完一步再调整并为下一步确定方向,直到真正的终点。迭代式和敏捷开发方式的结合,既保证了产品的质量又在项目产品的持续改进中具有一定的优势。吸取精华,破其糟粕,只有这样,项目才会达到趋于完美的程度。

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

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

相关文章

TDesign 点击高亮显示=》点击切换class类名

1. wx:for遍历数组 2. 在一行显示 2. 点击高亮

NPM 常用命令(七)

目录 1、npm help 1.1 命令使用 1.2 描述 1.3 配置 viewer 2、npm help-search 2.1 命令使用 2.2 描述 2.3 配置 long 3、npm hook 3.1 命令使用 3.2 描述 3.3 示例 3.4 配置 registry otp 4、npm init 4.1 命令使用 4.2 转发附加选项 4.3 示例 4.4 工作…

基于51单片机DS18B20温度及电流检测-proteus仿真-源程序

一、系统方案 本设计采用52单片机作为主控器,液晶1602显示,DS18B20检测温度,电流检测。 二、硬件设计 原理图如下: 三、单片机软件设计 1、首先是系统初始化 void lcd_init() //lcd 初始化设置子函数,不带参数 ,0x…

Matlab图像处理-边缘提取

基本概念 如果一个像素落在图像中某一个物体的边界上,那么它的邻域将成为一个灰度级变化的带。对这种变化最有用的两个特征是灰度的变化率和方向,它们分别以梯度向量的幅度和方向来表示。 边缘检测算子检查每一个像素的邻域并对灰度变化率进行量化&…

100天精通Python(可视化篇)——第100天:Pyecharts绘制多种炫酷漏斗图参数说明+代码实战

文章目录 专栏导读一、漏斗图介绍1. 说明2. 应用场景 二、漏斗图类说明1. 导包2. add函数 三、漏斗图实战1. 基础漏斗图2. 标签内漏斗图3. 百分比漏斗图4. 向上排序漏斗图5. 标准漏斗图 专栏导读 🔥🔥本文已收录于《100天精通Python从入门到就业》&…

特殊矩阵的压缩存储(对称矩阵,三角矩阵和三对角矩阵)

目录 1.对阵矩阵 2.三角矩阵 3.三对角矩阵(带状矩阵) 均假设数组的下标从0开始 1.对阵矩阵 定义:若对一个n阶矩阵A中的任意一个元素 aᵢ,ⱼ 都有aᵢ,ⱼaⱼ,ᵢ (1≤i,j≤n),则称其为对称矩阵。 存储策略…

Spring最佳实践: 构建高效可维护的Java应用程序

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

第7章_瑞萨MCU零基础入门系列教程之UART

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写,需要的同学可以在这里获取: https://item.taobao.com/item.htm?id728461040949 配套资料获取:https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总: ht…

编译国产openEuler 22.03 LTS系统OpenSSH 9.4的rpm安装包

目前OpenSSH版本已至9.4,其作为操作系统底层管理平台软件,需要保持更新以免遭受安全攻击,编译生成rpm包是生产环境中批量升级的最佳途径。本文在国产openEuler 22.03 LTS系统上完成OpenSSH 9.4的编译工作。 一、准备编译环境: 1…

【北大核心CSCD期刊】生物特征识别论文投稿经历

计算机工程与应用:半月刊、审稿快、比较简单。

iisfastchi漏洞复现

1.查看版本 2.在路径中写入 php脚本 发现使用不了 3.环境搭建 结局打开 把限制打开

PostgreSQL数据库事务系统——获取virtual transaction id

如果一个事务没有进行INSERT、UPDATE、DELETE操作,那么就步会分配事务ID,但事务仍然用一个虚拟事务ID代表自己。虚拟事务ID由两部分组成,第一部分是Backend ID,另一个是每个会话自己维护的本地事务ID计数器。通过两部分组合&#…

算法通关村第十九关——动态规划高频问题(白银)

算法通关村第十九关——动态规划高频问题(白银) 前言1 最少硬币数2 最长连续递增子序列3 最长递增子序列4 完全平方数5 跳跃游戏6 解码方法7 不同路径 II 前言 摘自:代码随想录 动态规划五部曲: 确定dp数组(dp tabl…

Unicode:Codejock Suite Prov22.1.0 for ActiveX Crack

Codejock 荣获 2022 年 Visual Studio 杂志读者选择奖!Visual Studio 杂志宣布了第 28 届年度读者选择奖的获奖者。今年是 Visual Studio 杂志的读者对其 Visual Studio 相关工具和服务进行投票的第 28 年,他们对 42 个类别的产品提供了意见,…

Windows开启linux子系统并迁移到非系统盘

windows用户如想使用linux有一个非常简单的方法,就是开启windows下的linux子系统,也叫做WSL(Windows Subsystem for Linux),下面简述一下安装过程。 首先打开控制面板,程序功能下面的开启或关闭windows功能 然后再下面这个界面勾…

【C刷题】day1

一、选择题 1.正确的输出结果是 int x5,y7; void swap() { int z; zx; xy; yz; } int main() { int x3,y8; swap(); printf("%d,%d\n",x, y); return 0; } 【答案】: 3,8 【解析】: 考点: &#xff…

Redis使用原生命令搭建集群

1.Redis版本及下载 找到安装的redis版本,redis3.0以上版本才支持集群 下载对应的版本 2.安装redis集群 解压上传编译 [hadoophost152 opensource]$ tar -xvf redis-3.2.11.tar.gz [hadoophost152 opensource]$ cd redis-3.2.11/ [hadoophost152 redis-3.2.11]$ ma…

数据结构 每日一练:将带头结点的单链表就地逆置(视频讲解两种方法)

目录 方法一 算法视频分析 方法二 算法视频分析 Q:什么是“就地”捏? A:就是指辅助空间复杂度为O(1),通俗一点来说就是不需要再开辟一块空间来实现算法。 特别说明: 笔者第一次录制视频,言语有些不顺&…

支持事务的分布式NoSQL——FoundationDB

【引子】周末阅读时光,一篇好的论文(https://cacm.acm.org/magazines/2023/6/273229-foundationdb-a-distributed-key-value-store/fulltext),开阔了眼界,支持事务语义的NoSQL应该放到软件系统架构备选方案之中。 Foun…

Kotlin 协程 - 生命周期 Job

一、概念 对于每一个由协程构建器开启的协程,都会返回一个 Job 实例用来管理协程的生命周期。launch()直接返回 Job实现,async() 返回的 Deferred 实现了 Job接口。 Job public fun start(): Boolean public fun cancel(cause: CancellationException? …