转自:http://blog.csdn.net/tony1130/article/details/1876819/
一、什么是持续集成(Continuous Integration)?
这个名词已经在软件开发领域持续了N年,一个比较简单的定义如下:
持续集成(CI)是一种实践,可以让团队在持续的基础 上收到反馈并进行改进,不必等到开发周期后期才寻找和修复缺陷。通俗一点儿说,就是指对于开发人员的每一次代码提交,都自动地把Repository中所有代码Check out到一个空目录,并且自动运行所有Test Case。如果成功则接受这次提交,否则告诉所有人,这是一个失败的Revision。更具体的解释可以参考Martin fowler的Continuous Integration 。
二、持续集成的价值与成本
有句时髦的话,叫做“存在即为合理”。既然持续集成已经存在了这么长的时间,而且没有消失的迹象,那就是有价值的东西。那么它的价值何在?有人概括如下:(1) 减小风险;(2) 减少手动过程;(3) 生成构建结果;(4) 安全感。
而持续集成的成本在于对持续集成代码的维护成本和集成的时间成本。因为随着项目进行,软硬件环境会越来越复杂,成品代码也会不断膨胀。此时,需要团队而修改或增加原有的测试代码,以适应这些变化,同时,每次集成所需时间也会变长,这就是持续集成的成本。某个blog中提道:“这种集成是如此的频繁,多少次的代码Commit就有多少次持续集成。前提是集成的成本很低,或者说是完全自动化的。”
三、持续集成应该自动化什么呢?
我们要以尽可能少的成本来获得尽可能多的价值。这就要考虑哪些自动化是必要的啦。Jez Humble提到至少有六点要做到自动化,它们分别是(1)自动化的运行测试;(2) 自动产生可部署的二进制成品;(3) 自动将成品自动部署到近似生产环境;(4) 自动为CodeBase打上标签;(5) 自动运行回归测试;(6)自动生成度量报告。
四、持续集成服务器的选择
在进行持续集成实践前,应当正确的选择并配置持续集成服务器。比较成熟的持续集成服务器包括:CruiseControl, Anthill, Bamboo, TeamCity, Continuum 等。CruiseControl作为开源产品,以其对于各种SCM以及构建工具的广泛支持而被许多开发团队所接受。而开发自动化专家 Duvall 采用一致的评估标准和很多说明性示例,介绍了一些开源 CI 服务器,包括 Continuum、CruiseControl 和 Luntbuild。并指出“要根据 自己的 具体技术和政策需求对工具进行分析”。并用以下五个指标来评估CI工具,它们分别是:(1) 特性;(2) 可靠性;(3) 寿命;(4) 目标环境;(5) 易用性。结果如下表:
而CruiseControl是我唯一真正用过的持续集成工具,它现在灵活而又强大功能也让我瞠目,而且配置与管理也较两年前容易得多啦。为什么说它强大呢?因为你只要想得到的问题,它也都会有所考虑。朋友的Blog上有些CruiseControl的最佳实践足以证明这一点,只要你肯去实践。
五、只有持续集成服务器是远远不够的
正如Jez Humble所说,CruiseControl和其它的CI工具本质上只不过是一个定时器,时间一到,做你让它做的事情。所以,必然要有其它工具与其结合,方显持续集成的本色。这些工具又是什么呢?想测试的话,你就要用一些测试工具,如JUnit,JWebUnit,Selenium等等;想检查代码标准的话,你就要用checkstyle等代码规范检查工具;想要了解测试覆盖率的话,你可能就要用到JCoverage啦。当然,想得到二进制文件,就要用到Ant,Make之类的工具啦。
六、最重要的事:实践与反思
也许这些东西大家都知道,而且有些人可能已经实践过啦。无论这些实践的结果是怎样的,一定不要忘记总结和反思。如果这些实践成功了,不要把它归功于这个工具,而是要总结一下为什么会成功,如果你愿意的话,还可以和大家分享一下。如果这些实践失败了,也不要把它归功于这个工具,而是要反思一下,是否正确地使用了这个工具,团队成员是否都喜欢这个工具,为什么?
------------------------------------------------------------------------------------------------------------------------------
转自:http://blog.csdn.net/hunterno4/article/details/22525667
一本好书使您改变。它将改变您的思想,您看待问题的角度和方式,最终,它将改改您的行为。然而,所有具有重要意义的改变都不会是在一夜之间发生的,如果您相信这种变革必会发生,不妨朝着这个方向去努力,经常改变,每次改变一点点。
——《持续集成:软件质量改进和风险降低之道》
CI的价值:
减少风险:缺陷的检测与修复变得更快;通过持续测试与持续审查,软件的健康程度可以测量;可以减少不实的假定。
减少重复过程
在任何时间、任何地点生成可部署的软件
增强项目的可见性
对开发团队的软件产品建立起更强大的产品信心
CI的阻碍:
增加了维护开销
团队变化太大
失败的构建太多
额外的软硬件成本
团队中7项好的CI实践:
经常提交代码
不要提交无法构建的代码
立即修复无法集成的构建
编写自动化的开发者测试
必须通过所有的测试和审查
执行私有构建
避免签出无法构建的代码
持续构建:
每次代码变更均进行自动化构建
将构建过程控制在单行命令下
将构建脚本从IDE中分离,避免与IDE产生耦合
集中放置软件资产
创建一致的目录结构
让构建快速失败
针对所有环境构建
使用专门的集成构建计算机
使用CI服务器
执行快速构建:分离较慢的构建,让集成构建少于10分钟
分阶段构建
持续数据库集成:
进行数据库自动化集成
使用本地数据库沙盒
将数据库资产放入版本控制库
让开发者能够修改数据库
让开发者成为开发团队的一员
持续测试:
线性系统的可靠性是每个系统组件的可靠性的乘积,因此特别需要保证底层组件的可靠性
进行自动化单元测试、组件测试、系统测试、功能测试,优先运行测试速度快的测试
为缺陷编写测试
让测试组件可以重复
尽量将测试限制为一个断言
进行代码持续审查,对代码的复杂度、耦合度、重复度等进行持续审查(sonarQube)
持续部署:
为每一个构建打上标签
执行测试
创建构建反馈报告
回滚构建的过程能力
持续反馈:
不要让您的团队习惯于忽略来自CI构建过程的消息
需要尽快反馈:持续集成的核心是减少缺陷引入、发现和修复之是的时间间隔
《持续交付:发布可靠软件的系统方法》
软件交付:
每次修改都应该触发反馈流程
必须尽快接收反馈
交互团队必须接收反馈并作出反应
无论部署到什么样的目标环境,都使用相同的部署方法
软件交付的原则:
为软件的发布创建一个可重复且可靠的过程
将几乎所有的事情自动化:配置管理自动化、验收测试自动化、数据库升降级自动化,对于硬件可采用虚拟化技术和像puppet这样的工具支撑自动化
将所有的东西都纳入版本控制
提前并频繁地做让你感到痛苦的事
内建质量:一旦发现缺陷,就要马上着手修复,交付团队中的每个人都应该对应用程序的质量负责
Done意味着已发布
交付过程是每个成员的责任
持续改进:团队应定期召开会议,反思过去的一段时间哪边做得好,哪边需要改进。
配置管理:
对所有内容进行版本控制,包括应用程序的软件、硬件及基础设施,与项目相关的所有东西都在版本控制库中(但是不推荐将源代码编译后的二进制文件也纳入版本控制中)
频繁提交代码到主干,尽量减少分支
使用意义明显的提交注释
以对待代码的方式来对待你的系统配置,使其受到正常的管理和测试
将特定于测试环境或生产环境的实际配置存放于与源代码分离的单独代码库中
应该严格控制生产环境,进行变更过程管理
高效配置管理策略:将二进制文件与配置信息分离;将所有的配置信息保存在一处。
基础设施应该具有自治特性,且非常容易重新搭建
保证配置管理是声明式且幂等的,即无论基础设施的初始状态是什么样,执行了配置操作后,基础设施或系统所处的状态就一定是你所期望的状态。
如果版本控制系统允许,尽量选择乐观锁(编辑本地工作副本的一个文件时不会阻止其它成员对其进行修改)
康威法则:设计系统的组织不可避免地要产生与其组织的沟通结构一样的设计,即由都坐在一起的小团队开发出来的产品更趋向于紧耦合、非模块化特点
持续集成:
一、良好的实践:
构建失败之后不要提交新代码
提交前在本地运行所有的提交测试,或者让持续集成服务器完成此事
等提交测试通过后再继续工作
回家之前,构建必须处于成功状态
时刻准备着回滚到前一个版本
回滚之前规定一个修复时间
不要将失败的测试注释掉
为自己导致的问题负责
测试驱动的开发
二、推荐的实践:
极限编程开发实践
若违背架构原则,就让构建失败
若测试运行变慢,就让构建失败
若有编译警告或代码风格问题,就让测试失败
测试策略:
一旦同一个测试重复做过多次手工操作,并确信不会花太多时间来维护时,就要把它自动化
单元测试不应该访问数据库、使用文件系统、与外部系统交互
尽可能频繁地向客户演示功能
建立一些基本的非功能测试,如容量测试、安全性测试。
提交测试应该避免复杂的数据准备,而是用尽量少的测试数据来断言被测试的单元正确地完成了所期望的功能
尽可能使用应用程序的公共API为测试创建正确的初始状态
部署流水线:
只生成一次二进制包,并将生成的二进制包存入于制品库中,之后的测试、部署均基于此二进制包
对不同环境采用同一种部署方式
对部署进行冒烟测试,这个冒烟测试还应该检查一下应用程序所依赖的服务是否都已启动
向生产环境的副本中部署,即先向类生产环境中部署
每次变更都要立即在流水线中传递
只要有环节失败,就停止整个流水线
为尽快加快反馈过程,增加提交阶段的测试
通常都应该使用增量的方法来实现部署流水线:构建、部署、单元测试、代码审查、验收测试、发布等步骤,部署流水线也应该不断变化,不断改善与重构
做整体优化,不断缩短周期时间,即修改一行代码到最终部署至线上并生效的时间
确保构建时尽量使用相对路径
应该尽量将需要管理的构建数量最少化
验收测试:
写应用程序验收条件时必须想着如何使其自动化,并遵循INVEST原则(independentnegotiable valuable estimable small testable)
尽量与GUI解耦
尽量使测试具有原子性,即与测试的执行顺序无关
单个测试范围内,应该避免所有异步情况,也要避免跨越测试边界情况
尽早修复失败的验收测试
当验收测试时间需要很长时,考虑使用虚拟化技术进行多环境并行测试
进行容量测试,但需要先进行度量,找到解决方案之前,必须先找出问题的根源,过早的优化是所有罪恶的根源
对于容量测试环境可以采用缩放后的类生产环境,而不是整个集群
把自动化容量测试作为部署流水线中的一个完成独立的阶段
部署与发布:
真正执行部署操作的人应该参与部署过程的创建
记录部署活动
不要删除旧文件,而是移动到别的位置
部署是整个团队的责任
服务器应用程序不应该有GUI
为新部署留预热期
快速失败
不要直接对生产环境进行修改
相关推荐
本篇文章将详细介绍如何配置和使用Apache+MySQL+PHP集成环境。 **1. Apache HTTP服务器** Apache是世界上最流行的Web服务器软件,它提供了强大的功能和灵活性。在WAMP环境中,Apache负责接收HTTP请求并返回PHP处理...
本文将详细介绍如何使用Jenkins结合Gradle实现Android项目的持续集成。 #### 搭建步骤 ##### 步骤一:部署Jenkins 本步骤涉及Jenkins的安装与基本配置,由于此处省略了具体步骤,推荐查阅官方文档或其他在线资源...
- **集成步骤**:详细描述持续集成的实现步骤以及各接口或子系统的集成过程。 - **重要性**:确保各个组件之间的交互能够正常工作,减少后期集成阶段可能出现的问题。 #### 六、测试数据分析 - **测试用例执行分析*...
### 系统集成项目管理综合知识点汇总 #### 一、项目质量管理执行阶段的关键技术 在系统集成项目管理中,质量管理是确保项目成功的关键环节之一。本章节将详细探讨项目质量管理执行阶段的重要技术,包括质量审计、...
**Buildbot:Python驱动的持续集成测试框架** `Buildbot`是一个强大且灵活的持续集成(CI)系统,它完全由Python编写,旨在自动化软件构建、测试和发布流程。持续集成是软件开发过程中的关键实践,它允许团队快速发现...
在IT行业的系统集成项目管理中,中级系统集成项目管理工程师的角色尤为重要,他们需要掌握一系列关键的计算技巧,以便于在实际工作中对项目进行有效管理和控制。本资料主要聚焦于两个核心领域:成本管理和进度管理,...
本文将详细介绍持续性能管理的概念、测试驱动开发(TDD)与持续集成(CI)的基本原理,并解释如何在Eclipse集成开发环境中实施CPM。 #### 1. 为什么需要一个新的方法论 **1.1 尽早解决性能问题能够节省时间和成本*...
4. **持续集成**:将单元测试集成到持续集成流程中,确保每次提交代码后都会自动运行测试。 5. **隔离测试**:通过模拟对象(如Mock、Stub)等方式,隔离外部依赖,专注于测试当前模块的功能。 ### 结论 单元集成...
- **文档管理**:所有运维过程中的文档将被记录并归档,每季度汇总提交。 - **人员管理**:技术人员将按照XX的工作制度进行管理,确保与院方工作同步。 - **其他要求**:XX有权根据任务需求调整人员工作,技术...
### 集成电路(IC)卡专用...通过上述内容的介绍,我们可以看到,集成电路(IC)卡专用芯片行业的人事部门不仅承担着人力资源管理的基本职能,还需要不断适应行业变化和技术进步的要求,为企业的可持续发展提供有力的支持。
《显示器常用集成电路资料汇编》是一本针对显示器维修与设计人员的专业参考资料,它汇总了大量关于显示器集成电路的基础知识、工作原理、故障排除技巧以及实际应用案例等内容,对于提高维修效率和技术水平具有重要...
通过以上表格和管理要点的介绍,我们可以看到,集成电路行业的人事部门在日常工作中需要运用多种工具和方法来提高工作效率、规范管理流程。这些表格不仅有助于优化人力资源配置,还能够帮助企业更好地应对行业挑战,...
- 风险监控:持续跟踪风险,适时更新风险管理计划。 9. **项目采购管理** - 采购规划:确定何时需要采购外部资源或服务。 - 供应商选择:评估和选择合适的供应商。 - 合同管理:管理和监督合同执行,处理合同...
这些表格模板的使用,可以帮助集成电路和集成产品焊接封装设备行业的营销部门更加系统化、专业化地开展工作,提升整体运营效能,实现业务的可持续增长。通过对这些表格的填充和分析,可以清晰地了解市场动态,调整...
同时,"教材变动汇总.pdf"文件很可能包含了对第2版教材中新增、修改或删除内容的详细对比,这对于考生来说至关重要,因为这些变动可能会直接影响考试的重点和难点。 学习这个教程并熟悉其中的知识点,将有助于系统...
客户满意调查表用于收集客户反馈,评估产品和服务质量,持续改进以提高客户满意度。 客户资料表保存了客户的基本信息和交易记录,是建立客户数据库的基础,有利于进行客户分类和精准营销。 客户投诉登记追踪表记录...
#### 二、集成电路用化学品行业人事部门使用的表格汇总及其意义 1. **集成电路用化学品行业面试评估表**:用于记录面试官对应聘者的综合评价,包括专业技能、沟通能力、团队合作精神等多个方面,帮助人事部门客观...
例如,如何制定WBS(工作分解结构),如何估算活动持续时间,如何编制项目预算,如何应用质量管理工具等。 3. **成本管理**:成本管理涉及项目预算的编制、成本估算、成本控制等。考生需要熟悉挣值管理(EVM)的...