当前位置: 首页 > news >正文

持续集成是什么

持续集成(Continuous integration)是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误

定义

大师Martin Fowler对持续集成是这样定义的:持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。

持续集成的宗旨是避免集成问题,如同在极限编程(XP)方法学中描述的集成地狱。持续集成并非普遍接受是用来改善集成频率的方法,因此重要的是区分两者所带来的效益。

在极限编程方法学,持续集成需要达到最佳成果,必须依靠着自动化集成单元测试并通过测试驱动开发。首先必须设想在上线运作之前,已在开发环境完成并通过所有的单元测试。这将帮助避免一个开发者的作业流程,导致其他开发者作业的中断。如果有需要,可以在完整上线运作之前进用部分已完成的功能,例如使用功能切换。

接着进行CI服务器建置概念的阐述、自动化运行单元测试的周期与每次测试需要提交给开发者的报告。建置CI服务器的用途(不一定要运行单元测试) 已经开始在极限编程(XP)社群之外的团队练习。如今,许多企业组织已经开始采用持续性集成,而非采用完整的极限编程(XP)。

除了自动化单元测试,组织在运用持续性集成(CI)一般会建置CI服务器来维护持续性套用质量控制的程序-小部分的影响,并且经常性使用。除了运行单元与集成测试之外,还有额外的静态与动态测试,量测与描述性能,从程序来源码摘录与文件格式与促成手动质量保证(QA)程序。持续性质量控制应用程序用意在提升软件质量以及减少交付的时间,在完成所有开发后,取代传统软件上线质量控制机制。此非常相似进行频繁集成的最初概念让集成得以在QA程序上更容易地达成。

同样的道理,持续性交付的最佳实践进一步扩展了持续性集成(CI),以确保软件检核在主要程序上并且能够部署到用户以确保实际的部署流程可以非常快速。

措施

减少风险

一天中进行多次的集成,并做了相应的测试,这样有利于检查缺陷,了解软件的健康状况,减少假定。

减少重复过程

减少重复的过程可以节省时间、费用和工作量。说起来简单,做起来难。这些浪费时间的重复劳动可能在我们的项目活动的任何一个环节发生,包括代码编译、数据库集成、测试、审查、部署及反馈。通过自动化的持续集成可以将这些重复的动作都变成自动化的,无需太多人工干预,让人们的时间更多的投入到动脑筋的、更高价值的事情上。

任何时间、任何地点生成可部署的软件

持续集成可以让您在任何时间发布可以部署的软件。从外界来看,这是持续集成最明显的好处,我们可以对改进软件品质和减少风险说起来滔滔不绝,但对于客户来说,可以部署的软件产品是最实际的资产。利用持续集成,您可以经常对源代码进行一些小改动,并将这些改动和其他的代码进行集成。如果出现问题,项目成员马上就会被通知到,问题会第一时间被修复。不采用持续集成的情况下,这些问题有可能到交付前的集成测试的时候才发现,有可能会导致延迟发布产品,而在急于修复这些缺陷的时候又有可能引入新的缺陷,最终可能导致项目失败。

增强项目的可见性

持续集成让我们能够注意到趋势并进行有效的决策。如果没有真实或最新的数据提供支持,项目就会遇到麻烦,每个人都会提出他最好的猜测。通常,项目成员通过手工收集这些信息,增加了负担,也很耗时。持续集成可以带来两点积极效果:

(1)有效决策:持续集成系统为项目构建状态和品质指标提供了及时的信息,有些持续集成系统可以报告功能完成度和缺陷率。

(2)注意到趋势:由于经常集成,我们可以看到一些趋势,如构建成功或失败、总体品质以及其它的项目信息。

建立团队对开发产品的信心

持续集成可以建立开发团队对开发产品的信心,因为他们清楚的知道每一次构建的结果,他们知道他们对软件的改动造成了哪些影响,结果怎么样。

要素

1.统一的代码库

2.自动构建

3.自动测试

4.每个人每天都要向代码库主干提交代码

5.每次代码递交后都会在持续集成服务器上触发一次构建

6.保证快速构建

7.模拟生产环境的自动测试

8.每个人都可以很容易的获取最新可执行的应用程序

9.每个人都清楚正在发生的状况

10.自动化的部署

原则

1. 所有的开发人员需要在本地机器上做本地构建,然后再提交的版本控制库中,从而确保他们的变更不会导致持续集成失败。

2. 开发人员每天至少向版本控制库中提交一次代码。

3. 开发人员每天至少需要从版本控制库中更新一次代码到本地机器。

4. 需要有专门的集成服务器来执行集成构建,每天要执行多次构建。

5. 每次构建都要100%通过。

6. 每次构建都可以生成可发布的产品。

7. 修复失败的构建是优先级最高的事情。

8. 测试是未来,未来是测试

工作流程

当从事变更时,开发者会从基础代码库复制以进行作业,其他开发者提交代码的变更至来源代码库,并透过副本的方式取代来源代码库的代码。不只变更目前(1998年)的代码库,新的代码也可以新增成为程序库、其它共享资源与潜在冲突。

当分支代码保持在取出状态时间越长,当分支代码开发者进行主线重新集成时,就愈容易遭遇集成多重冲突的风险以及失败。当开发者将代码提交到代码库时,首先必须更新代码以反映他们在代码库中的更改,因为他们拿到了副本。代码库包含的更改越多,开发人员在提交自己的更改前必须运行的工作越多。

终于,该程序库也许变成非常不同于开发者的目标代码,他们进入有时候被称为合并地狱或集成地狱的阶段,这时候开发者所花费的集成时间,将超过最初代码开发的时间。

持续性集成涉及预先集成与预先与经常性的集成,借此来避免踩到集成地狱的陷阱,实践的目标是减少重工、减少成本与时间。

持续性集成补充的实践是在提交成果之前,每个开发人员必须运行一个完整的构建与运行及通过所有的单元测试、集成测试,这些都是当持续性集成服务器侦测到代码有新的提交时,必须经常性与自动化的进行。

相关文章:

  • PaddlePaddle-飞桨
  • anaconda
  • CUDA详解
  • Windows系统查看CUDA版本号
  • GPU,CUDA,cuDNN的理解
  • whl是什么
  • PaddleOCR
  • CPU指令集介绍
  • BLAS、OpenBLAS、ATLAS、MKL
  • 深度学习训练和推理之间有什么差异
  • PaddleOCR安装步骤
  • Python 命令行参数
  • 转json报错:TypeError: Object of type int64 is not JSON serializable
  • NVIDIA显卡架构
  • 解决You are using GPU version Paddle, but your CUDA device is not set properly
  • 30秒的PHP代码片段(1)数组 - Array
  • Centos6.8 使用rpm安装mysql5.7
  • HomeBrew常规使用教程
  • java第三方包学习之lombok
  • Odoo domain写法及运用
  • Vue 动态创建 component
  • Web Storage相关
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 关于for循环的简单归纳
  • 离散点最小(凸)包围边界查找
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 数据可视化之 Sankey 桑基图的实现
  • 你对linux中grep命令知道多少?
  • hi-nginx-1.3.4编译安装
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #传输# #传输数据判断#
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (20050108)又读《平凡的世界》
  • (3)(3.5) 遥测无线电区域条例
  • (floyd+补集) poj 3275
  • (Git) gitignore基础使用
  • (六)Hibernate的二级缓存
  • (十三)Flask之特殊装饰器详解
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (循环依赖问题)学习spring的第九天
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (正则)提取页面里的img标签
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .htaccess配置重写url引擎
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .net core 6 集成和使用 mongodb
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • [C/C++]_[初级]_[关于编译时出现有符号-无符号不匹配的警告-sizeof使用注意事项]
  • [C/C++]数据结构----顺序表的实现(增删查改)
  • [C++][基础]1_变量、常量和基本类型