`

什么是持续集成

    博客分类:
  • CI
阅读更多

一、什么是持续集成(Continuous Integration)?

这个名词已经在软件开发领域持续了N年,一个比较简单的定义如下:
持续集成(CI)是一种实践,可以让团队在持续的基础 上收到反馈并进行改进,不必等到开发周期后期才寻找和修复缺陷。 通俗一点儿说,就是指对于开发人员的每一次代码提交,都自动地把Repository中所有代码Check out到一个空目录,并且自动运行所有Test Case。如果成功则接受这次提交,否则告诉所有人,这是一个失败的Revision。 更具体的解释可以参考Martin fowlerContinuous 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) 易用性。结果如下表:
CI

而CruiseControl是我唯一真正用过的持续集成工具,它现在灵活而又强大功能也让我瞠目,而且配置与管理也较两年前容易得多啦。 为什么说它强大呢?因为你只要想得到的问题,它也都会有所考虑。朋友的Blog 上有些CruiseControl的最佳实践足以证明这一点,只要你肯去实践。

五、只有持续集成服务器是远远不够的

正如Jez Humble所说,CruiseControl和其它的CI工具本质上只不过是一个定时器,时间一到,做你让它做的事情 。 所以,必然要有其它工具与其结合,方显持续集成的本色。这些工具又是什么呢?想测试的话,你就要用一些测试工具,如 JUnit,JWebUnit,Selenium等等;想检查代码标准的话,你就要用checkstyle等代码规范检查工具;想要了解测试覆盖率的话, 你可能就要用到JCoverage啦。当然,想得到二进制文件,就要用到Ant,Make之类的工具啦。

六、最重要的事:实践与反思

也 许这些东西大家都知道,而且有些人可能已经实践过啦。无论这些实践的结果是怎样的,一定不要忘记总结和反思。如果这些实践成功了,不要把它归功于这个工 具,而是要总结一下为什么会成功,如果你愿意的话,还可以和大家分享一下。如果这些实践失败了,也不要把它归功于这个工具,而是要反思一下,是否正确地使 用了这个工具,团队成员是否都喜欢这个工具,为什么?

分享到:
评论

相关推荐

    什么是持续集成(CI)持续部署(CD)?

    ### 什么是持续集成(CI)与持续部署(CD)? 在现代软件开发过程中,持续集成(CI)与持续部署(CD)是两个至关重要的概念,它们不仅有助于提高软件开发的效率,还能确保软件质量,加快产品上市速度。下面将详细...

    Hudson持续集成实战

    首先,我们来理解一下什么是持续集成(Continuous Integration,CI)。持续集成是一种软件开发实践,要求开发者频繁地将他们的代码变更合并到主分支,通常每天至少一次。每次合并后,都会自动运行构建和测试,以便...

    java持续集成 持续集成

    Java持续集成是软件开发过程中的一个关键实践,它旨在频繁地合并开发人员的代码更改,以便尽早发现并解决潜在的问题。这个过程通过自动化构建、测试和部署,确保代码的质量和项目的稳定性。持续集成(Continuous ...

    持续集成php持续集成

    Hudson是一个开源的持续集成服务器,它可以监控和执行项目的构建任务,提供实时反馈,帮助团队保持高质量的代码库。 【Hudson做增量发布】是指在每次代码变更后,仅构建和测试变化的部分,而不是整个项目。这减少了...

    MongoDB+NodeJS持续集成

    #### 什么是持续集成 持续集成的核心在于自动化构建和测试,要求每次代码提交到版本控制系统(VCS)后自动运行测试套件,并且报告结果的成功与失败。这需要开发团队具备一套测试套件,并且使用Node.js等工具可以很...

    Gitlab持续集成持续部署(CI-CD)研究报告.doc

    **2.1 什么是持续集成** 持续集成是一种软件开发实践,开发者频繁地将代码提交至共享仓库中,每次提交后会触发构建过程,包括自动化测试,以验证新代码是否符合要求。其核心思想是通过自动化和持续性的反馈来提高...

    企业IT持续集成与持续交付实践.pdf

    企业IT持续集成与持续交付实践 持续集成(Continuous Integration,CI)和持续交付(Continuous Delivery,CD)是企业IT实践中两个非常重要的概念,它们之间紧密相连,都是为了提高软件开发、测试和部署的效率和...

    bk-ci蓝鲸持续集成平台 v2.0.2.zip

    首先,让我们详细了解一下什么是持续集成(Continuous Integration)。持续集成是一种软件开发实践,其中开发人员频繁地将他们的代码更改合并到主分支,通常每天至少一次。每次合并后,都会自动运行构建和测试,以...

    持续集成软件质量改进和风险降低之道.pdf

    《持续集成:软件质量改进和风险降低之道》一书深入探讨了如何在IT行业中通过持续集成来提升软件质量并有效管理风险。持续集成是敏捷开发方法的重要组成部分,它强调频繁地将开发人员的工作成果合并到主分支,以尽早...

    软件工程的持续集成与部署.pptx

    **2.1 什么是持续集成** 持续集成是一种软件开发实践,指的是开发者频繁地(通常是每天)将他们的代码更改合并到一个共享的主分支中,并通过自动化构建和测试来验证新提交的代码是否导致了任何问题。这种做法有助于...

    软件测试中的自动化测试与持续集成2.pptx

    ##### 一、什么是持续集成? 持续集成是一种软件开发实践,它强调频繁地集成代码,并进行自动化构建和测试。通过这种方式,可以在早期发现并解决集成问题,确保代码的质量和稳定性。 ##### 二、持续集成的优势 - ...

    持续集成持续集成持续集成

    持续集成持续集成持续集成持续集成持续集成持续集成持续集成

    软件测试中的自动化测试与持续集成8.pptx

    ##### 一、什么是持续集成? 持续集成是一种软件开发实践,它鼓励开发者频繁地提交代码到共享的主干上,并立即构建和测试。持续集成的主要目的是尽早发现并解决问题,从而提高代码质量和开发效率。 ##### 二、持续...

    软件测试中的自动化测试与持续集成1.pptx

    ##### 一、什么是持续集成? 持续集成是一种软件开发实践,它要求开发人员频繁地将他们的代码变更合并到一个共享的主分支中,并通过自动化构建和测试来验证这些变更的正确性。持续集成的主要目标是早期发现并解决...

    持续集成的几个步骤

    持续集成(Continuous Integration,简称CI)是一种软件开发实践,它要求开发人员频繁地(通常是每天多次)将代码更改集成到共享的主干中。这个实践的重点在于尽早和频繁地检测到集成错误,确保项目开发的各个分支...

    软件测试中的自动化测试与持续集成5.pptx

    **什么是持续集成?** 持续集成是一种软件开发实践,通过频繁地集成和构建代码,并进行自动化测试,旨在早期发现和解决集成问题,确保代码质量和稳定性。 **持续集成的优势** - **减少集成问题**:通过早期发现并...

    持续集成配置文件

    持续集成工具 cruisecontrol 配置文件

    持续集成、交付和部署:对方法、工具、挑战和实践的系统回顾.pdf

    持续集成、交付和部署(CI/CD)是软件开发行业中的实践方法,其目标是使组织能够更频繁、更可靠地发布新的特性和产品。随着对持续实践方法兴趣的增加,系统性地回顾和总结这些实践方法、工具、挑战和实践的做法变得...

    软件测试中的自动化测试与持续集成.pptx

    ##### 一、什么是持续集成? 持续集成是一种软件开发实践,它鼓励开发者频繁地将代码合并到主分支,并立即构建和测试新代码。这样做有助于尽早发现和解决问题,提高代码质量和软件的稳定性。 ##### 二、持续集成的...

Global site tag (gtag.js) - Google Analytics