简介持续集成(CI)以及相关工具推荐

Vladimir Pecanac编程

虽然并不是每一个软件项目都注定会得到巨大成功,但一些软件方法和最佳实践能够提升成功概率,并让开发工做更愉快。其中如今流行的一种作法是持续集成(CI,Continuous Integration)。服务器

持续集成最初由Grady Booch在布区方法中提出,以后成为了极限编程(extreme programming)的一部分,目的是防止集成问题堆积成为“集成地狱(integration hell)”。工具

接下来,咱们将从如下几个方面一块儿了解什么是持续集成以及如何利用它:单元测试

  • 什么是持续集成
  • 持续集成的好处
  • 持续集成的要求
  • 持续集成服务器
  • 对于团队的要求
  • 持续交付和持续部署
  • 潜在的担忧

什么是持续集成

持续集成是指不断整合项目更改并进行相应的测试,一般天天至少进行一次。测试

马丁福勒说得很好:spa

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

自动化的构建、测试和部署流程能够解决软件开发项目中的许多麻烦和问题。经过可靠的方法频繁整合代码更改,能够尽早发现错误。毕竟没有人但愿在demo day出现因为几个月前编写一直没有适当的机会进行合理测试而出现的任何差池。版本控制

持续集成能够解决这一痛点,它的整个流程以下图所示:调试

持续集成的好处

首先,下降集成风险。多数状况下,一个项目会有多我的单独处理任务或者一部分代码,人员越多,整合的风险越大,而调试、解决问题自己会是很是痛苦的,咱们极可能须要大量修改代码。频繁的集成将极大减小此类问题。code

第二,保障代码质量。咱们能够把精力放在业务代码和功能上,从而得到更高质量的软件。blog

第三,有效的版本控制。若是有人提交的代码有问题,团队会即时收到通知,在有任何人拉取以前解决问题。

第四,减小团队间摩擦。明确而公正的制度流程能够减小团队之间的争吵。

第五,改善测试团队生活质量:) 经过不一样版本和构建隔离并追踪错误能够有效减轻测试团队负担。

第六,部署更快。自动化可让本来繁琐耗时的部署工做变得轻松高效。

第七,加强团队信心和士气。团队成员没必要再为潜在错误可能会形成的不良后果而忧心忡忡,能够轻装上阵去创造更好的软件。

另外还有一个好处是,团队新成员能够更容易地融入整个项目之中。

持续集成的要求

落地持续集成系统,须要知足如下要求:

首先版本控制系统(VCS)必不可少,咱们须要可靠的方法来集中和保存项目的全部更改。

若是咱们采用的是onsite解决方案,须要有备用的服务器(至少有台虚拟机)。有一台干净的机器来构建系统很是必要。

若是咱们不想把服务器或者虚拟机搞得一团糟,能够选择一些持续集成工具和解决方案,用来维护整个流程并得到更强的伸缩性。

固然从技术上来说,持续集成工具不是必须的,就像软件开发不是必需要用IDE同样,具体怎么选择,在于咱们的能力和需求。

持续集成服务器

持续集成服务器(也称为构建服务器,又称CI服务器)是一种软件工具,它包含全部持续集成操做,并为咱们构建项目提供可靠和稳定的环境。通常持续集成服务器具有高度可配置性和可调整性,可以为不一样平台构建各类项目。

使用持续集成服务器最好可以安装在干净的机器上,保证其在中立的环境中不受没必要要的工具、环境变量和其余配置影响。若是实在没有物理机,能够考虑构建一个虚拟环境。

另外使用开发机器而不设置虚拟环境,可能会致使错误的假设和结果。把应用部署到另外一台机器上时,会遇到新的问题。

持续集成服务器一般使用版本控制系统(如Subversion或Git或任何其余版本)来提取项目文件。该系统监控项目仓库,在代码成功提交时,会拉去更改并按照咱们的定义来执行。完成任务后,持续集成服务器会向相关成员发送构建细节信息。检查项目的最新版本、运行构建脚本、运行测试以及发送通知是持续集成服务器的最基本功能。

除此以外,代码分析、代码覆盖率、代码质量报告、agent pooling、pipeline、构建比较、IDE集成、第三方工具支持等功能,会让持续集成服务器更加灵活好用。

对于团队的要求

相比硬件、软件或者工具,人的因素对于持续集成成功与否更为关键,这要求团队里的每一个成员都能养成良好的“持续集成”习惯,例如频繁提交代码、当即修复失败构建、编写单元测试等等。

持续交付和持续部署

典型的持续集成生命周期包括构建项目、单元测试、部署测试和验收测试。一旦项目成功经过了全部阶段,就能够将其部署到生产环境中。

交付项目到生产环境中能够像其余环节同样自动完成,也能够根据业务需求手动完成。对于自动完成的状况,咱们会了解到持续交付(Continuous Delivery)和持续部署(Continuous Deployment),其差别以下图所示:

潜在的担忧

持续集成有不少好处,但也有人对它保持怀疑态度,主要考虑有如下几点:

增长维护成本

咱们原本也须要构建、测试和部署系统。若是不用持续集成来管理这些流程的话,也须要其余的工具,不然手工和人力将在项目达到必定复杂度时捉襟见肘。

变化太大

一些承认能不太愿意在遗留系统上作太多改变,这种状况下,能够考虑逐步进行,如今小部分工做上使用持续集成。若是你们对效果满意,再引入落实到其余部分工做上。

硬件/软件成本

与维护成本及项目完成后回头解决问题的成本相比,实施持续集成的成本微不足道。

开发者已经在作这些(持续集成的)工做

开发者本能够把时间集中在更有价值的业务开发上,而不是把精力浪费在重复性工做中。

项目过小

即便是很小的项目也能够从透明的开发构成与集中的项目资源和构建中获益,许多在线持续集成工具设置起来很是简单。

持续集成工具/平台

市面上已有不少开源持续集成工具,例如咱们熟悉的Jenkins,还有TeamCity、Travis CI、GO CD、Bamboo、Gitlab CI、CircleCI……等等等等。

开源PaaS Rainbond也支持持续集成,提供可扩展的CI/CD,支持Java、PHP、Python、Ruby、Node.js、Golang、Scala等源代码构建,支持代码滚动上线、一键回滚、灰度发布、AB测试,可对接Jenkins等第三方CI/CD。

进一步了解请访问Rainbond官网或试用公有云(新用户7天免费)

相关文章
相关标签/搜索