从上图可以看到,持续集成该当至少包括以下几部分:
自动化构建Continuous Build
自动化测试Continuous Test
自动化集成Continuous Intergration
自动化构建
包括以下过程:
将源码编译成为二进制码
打包二进制码
运行自动化测试
天生文档
天生分发媒体(例如:Debian DEB、Red Hat RPM或者Windows MSI文件)
以是,自动化构建,从功能角度分,最关键的是三部分:版本掌握工具、构建工具、CI做事器。而个中最核心的又是构建工具。其他开源的、与持续集成干系的工具也有很多,但大多数是赞助性的工具。
(1)版本掌握工具
有时,版本掌握又称为配置管理(SCM),以是版本掌握工具同时也是配置管理工具。在各种版本掌握的开源软件中,最著名的莫过于CVS、SVN(Subversion)、GIT三个了。
这三个工具各有千秋。个中,GIT支持离线事情,更适宜开源软件或者开拓职员不能集中办公情形下的版本管理事情。同时,SVN和GIT可以合营利用。
(2)构建工具
构建工具是持续集成的核心,它对源代码进行自动化编译、测试、代码检讨,以及打包程序、支配(发布)到运用做事器上。从配置管理工具高下载最新源代码后,所有的后续事情险些都可以通过构建工具完成。
在java开拓中,比较有名的构建工具便是Ant、Maven、Gradle。在PHP开拓中,Phing(基于Ant)也比较有名。同样的,Maven也可通过干系的PHP-Maven插件完成对PHP开拓构建的支持。
(3)CI做事器
CI做事器的紧张浸染便是供应一个平台,用于整合版本掌握和构建事情,并管理、掌握自动化的持续集成。
开源软件中,比较有名的CI做事器包括Jenkins、CruiseControl、Continuum。而比较有名的商业化CI做事器是TeamCity、Bamboo、Pulse等。
(4)其他工具
很多工具可以通过与构建工具、CI工具相结合(当然,个中有很多工具也可以单独事情),来完成更多的自动测试、报告天生等事情。根据工具不同,其详细的结合方法也不同,但大体都是通过插件形式进行结合的。例如:
Maven中通过依赖和plugin办法引入第三方工具
Jenkins紧张通过各种插件引入第三方工具
这些工具种类实在太多,可以根据实际事情须要进行选择。
2.自动化测试
自动化测试是持续集成必不可少的一部分,基本上,没有自动化测试的持续集成,都很难称之为真正的持续集成。我们希望持续集成能够尽早的暴露问题,但这远非配置一个 Hudson/Jenkins做事器那么大略,只有真正存心编写了较为完全的测试用例,并一贯掩护它们,持续集成才能勤学不辍地运行测试并第一韶光报告问题。
测试自动化是利用特定的软件(独立于被测试的软件)来掌握测试的实行以及比较实际输出与预期输出。测试自动化可以将某些重复但必要的任务自动化,或者实行某些难以手动实行的额外测试。
自动化测试还包括单元测试、集成测试、系统测试、验收测试、性能测试等,在不同的场景下,它们都能为软件开拓带来极大的代价。
二、持续交付
持续交付(Continuous Delivery, CD)是一种软件工程的手段,让软件在短周期内产出,确保软件随时可以被可靠地发布。其目的在于更快、更频繁地构建、测试以及发布软件。通过加强对生产环境的运用进行渐进式更新,这种手段可以降落交付变更的本钱与风险。一个大略直不雅观的与可重复的支配过程对付持续交付来说是很主要的。
三、持续支配
如图所示,持续支配与持续交付之间的差异便是前者将支配自动化了。
在持续交付的实践中,交付的目标是QA,但是实际上,软件终极是要交付到客户手上的。在SaaS领域里,持续支配采取得比较广泛,由于做事比较随意马虎做到静默升级。
采取持续支配的条件是自动化测试的覆盖率足够高。
采取持续支配的好处是能减少运维的事情量,缩短新特性从开拓到实际交付的周期。
四、CI/CD详细实现
常见CI/CD工具及其比较:
这里的支持,意思该当是直接的支持,例如Jenkins,实在和git结合也很大略,通过脚本就可以实现。
五、持续集成工具集之 Jenkins简介
Jenkins 是一个可扩展的持续集成引擎。
1.紧张用于:
持续、自动地构建/测试软件项目。
监控一些定时实行的任务。Jenkins拥有的特性包括:
2.Jenkins拥有的特性包括:
易于安装-只要把jenkins.war支配到servlet容器,不须要数据库支持。
易于配置-所有配置都是通过其供应的web界面实现。
集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail关照。
天生JUnit/TestNG测试报告
分布式构建支持Jenkins能够让多台打算机一起构建/测试。
文件识别:Jenkins能够跟踪哪次构建天生哪些jar,哪次构建利用哪个版本的jar等。
插件支持:支持扩展插件,你可以开拓适宜自己团队利用的工具。
3.Jenkins的涌现
目前持续集成(CI)已成为当前许多软件开拓团队在全体软件开拓生命周期内侧重于担保代码质量的常见做法。它是一种实践,旨在缓和和稳固软件的构建过程。并且能够帮助您的开拓团队应对如下寻衅:
软件构建自动化 :配置完成后,CI系统会依照预先制订的韶光表,或者针对某特定事宜,对目标软件进行构建。
构建可持续的自动化检讨 :CI系统能持续地获取新增或修正后签入的源代码,也便是说,当软件开拓团队须要周期性的检讨新增或修正后的代码时,CI系统会不断确认这些新代码是否毁坏了原有软件的成功构建。这减少了开拓者们在检讨彼此相互依存的代码中变革情形须要花费的韶光和精力。
构建可持续的自动化测试 :构建检讨的扩展部分,构建后实行预先制订的一套测试规则,完成后触发关照(Email,RSS等等)给干系确当事人。
天生后后续过程的自动化 :当自动化检讨和测试成功完成,软件构建的周期中可能也须要一些额外的任务,诸如天生文档、打包软件、支配构件到一个运行环境或者软件仓库。这样,构件才能更迅速地供应给用户利用。
支配一个CI系统须要的最低哀求是,一个可获取的源代码的仓库,一个包含构建脚本的项目。
下图概括了CI系统的基本构造:
4.利用Jenkins的一些情由:
该系统的各个组成部分是按如下顺序来发挥浸染的:
开拓者检入代码到源代码仓库。
CI系统会为每一个项目创建了一个单独的事情区。当预设或要求一次新的构建时,它将把源代码仓库的源码存放到对应的事情区。
CI系统会在对应的事情区内实行构建过程。
(配置如果存在)构建完成后,CI系统会在一个新的构件中实行定义的一套测试。完成后触发关照(Email,RSS等等)给干系确当事人。
(配置如果存在)如果构建成功,这个构件会被打包并转移到一个支配目标(如运用做事器)或存储为软件仓库中的一个新版本。软件仓库可以是CI系统的一部分,也可以是一个外部的仓库,诸如一个文件做事器或者像Java.NET、 SourceForge之类的网站。
CI系统常日会根据要求发起相应的操作,诸如即时构建、天生报告,或者检索一些构建好的构件。
Jenkins便是这么一个CI系统。之前叫做Hudson。
是所有CI产品中在安装和配置上最大略
基于Web访问,用户界面非常友好、直不雅观和灵巧,在许多情形下,还供应了AJAX的即时反馈。
Jenkins是基于Java开拓的(如果你是一个Java开拓职员,这是非常有用的),但它不仅限于构建基于Java的软件。
Jenkins拥有大量的插件。这些插件极大的扩展了Jenkins的功能;它们都是开源的,而且它们可以直接通过web界面来进行安装与管理。
5.Jenkins的目标
Jenkins的紧张目标是监控软件开拓流程,快速显示问题。以是能担保开拓职员以及干系职员省时省力提高开拓效率。
CI系统在全体开拓过程中的紧张浸染是掌握:当系统在代码存储库中探测到修正时,它将运行构建的任务委托给构建过程本身。如果构建失落败了,那么CI系统将关照干系职员,然后连续监视存储库。它的角色看起来是被动的;但它确能快速反响问题。
特殊是它具有以下优点:
Jenkins统统配置都可以在web界面上完成。有些配置如MAVEN_HOME和Email,只须要配置一次,所有的项目就都能用。当然也可以通过修正XML进行配置。
支持Maven的模块(Module),Jenkins对Maven做了优化,因此它能自动识别Module,每个Module可以配置成一个job。相称灵巧。
测试报告聚合,所有模块的测试报告都被聚合在一起,结果一览无余,利用其他CI,这险些是件不可能完成的任务。
构件指纹(artifact fingerprint),每次build的结果构件都被很好的自动管理,无需任何配置就可以方便的浏览下载。
CIO之家 www.ciozj.com 微信"大众年夜众号:imciow