使用持续集成更快地开发软件

了解使用 IBM SmartCloud Enterprise 作为框架进行持续集成的实践

持续集成是一种软件开发实践,团队成员可通过它频繁地集成其工作;通常每个人每天至少会集成一次,这会导致每天多次进行集成。每次集成都会使用一个自动化构建操作(包括测试)来进行验证,以便尽可能快地检测集成错误。许多团队发现,此方法显著减少了集成问题,使团队能够更快地开发结构紧凑的软件。因此,持续集成可显著提高效率,帮助尽快找到潜在的问题,尤其是在开发流程的早期阶段。作者使用 IBM® SmartCloud Enterprise 作为框架描述了持续集成的最佳实践。

Pan Xia Zou, 高级软件工程师, IBM

Pan Xia Zou 是 IBM 的一位高级软件工程师,担任 IBM SmartCloud Enterprise 的构建和部署自动化架构师。



Qi Wen Chen, 软件开发人员, IBM

Qi Wen Chen 是位于中国的 IBM Software Group 的一名开发人员。



Qiangguo Tong, 高级软件工程师, IBM

Qiang Guo Tong 是一位高级软件工程师,在 Web 开发方面有 5 年的工作经验。他是 IBM 中使用的多个全球化工具的技术领导。



Xing Hua Bi, 软件开发人员, IBM

Xing Hua Bi 是位于中国的 IBM Software Group 的一名开发人员。



2012 年 7 月 02 日

IBM SmartCloud Enterprise 是 IBM 拥有并运作的一个云服务。IBM 在其全球的诸多场所都有大量云计算环境和一些计划,但开发和测试才真正代表其第一个商业服务,开发和测试结合了您期望从云中获取的一些关键属性:多租户、自助服务、基于使用的定价和随时可用的虚拟化软件映像。

本文的作者是 IBM SmartCloud Enterprise 团队的成员,他们通过云服务来应用持续集成,帮助开发人员和测试人员提高其软件的效率和质量。

关键挑战

在软件开发流程中,开发人员使用自己的环境来编写代码和调试问题通常更有效。在将代码部署到共享的集成测试环境中时,独立的开发环境通常会花费更多成本。虽然使用自己的环境可帮助开发人员尽早找到问题,但有许多挑战使得建立和维护这些环境变得很困难。

首先,环境已变得越来越复杂。在我们的项目中,即使是最简单的配置,都需要在 10 多个服务器上安装和部署超过 12 个组件。建立完整的环境需要大量时间和资源,开发人员通常无法及时创建环境来满足其最后期限。

其次,有越来越多的版本需要维护和开发。开发人员需要基于最新的代码级别和最新的环境来实现新功能,并基于以前的代码级别和以前的环境来支持和修复缺陷。测试人员还需要不同的环境来执行针对客户的既定计划和紧急支持的测试案例。维护不同版本的所有不同环境并将它们提供给大量的开发人员很困难。

最后,维护大量映像需要成本。随着环境和版本的不断增加,与物理环境相关的一些成本也会相应地增加。除了人员的增加之外,这些环境还需要更多的空间、硬件、电力和制冷。


经验

在您需要为每个开发人员提供完整的环境时,开发环境可能非常昂贵。最好将组件分解为共享和独占的组件。一些组件(比如数据库和数据阶段组件)可由使用某些版本的开发人员共享。其他组件(比如数据库、WebSphere® 服务器、Web 服务器和 TAMeb Tivoli® Access Manager for e-Business)则无法共享。要提高服务器利用率并考虑低访问流,最好将多个组件放在一台服务器上(将数据库服务器、WebSphere 服务器、Web 服务器组合放在一台机器上,将 TAMeb 放在另一台机器上)。这样做可以显著降低成本。

IBM SmartCloud Enterprise 提供了配备多台服务器的能力,比如 Linux 32 位和 64 位、WebSphere 和数据库服务器。基于从 IBM SmartCloud Enterprise 请求的服务,自动化脚本会安装组件和部署构建版本。

构建环境之后,就会使用一个构建验证测试来验证它,然后使用 IBM SmartCloud Enterprise 提供的创建映像功能将它建立为新映像。IBM SmartCloud Enterprise 提供了基于公共映像配备服务器的功能。它还提供了基于所配备的服务器,通过自定义来创建新私有映像的功能。

在需要向开发人员提供他们自己的环境时,可以使用 IBM SmartCloud Enterprise 基于私有映像来配备新服务器。只需花费几分钟的时间,即可满足为环境提供指定版本的需求。然后开发人员就可以高效地部署新代码更改和验证结果。

测试团队通常需要完整的环境来执行测试案例,可采用与开发人员配备环境类似的方式来配备这个环境。

当不需要某些服务器时,可以使用 IBM SmartCloud Enterprise 提供的删除功能来释放资源。

此外,还有其他多种方法来提高实际开发流程的效率:

  • 将一个具有中间件和配置,但没有构建版本的环境创建为私有映像,并将它作为一个模板来进行维护。
  • 创建一个用于每日构建的私有映像,以便提供最新的环境。

图 1 描述了环境流程。

图 1. 环境流程
环境流程

图 2 显示了本地环境(归开发人员自己所有)的改良。

图 2. 本地环境
本地环境

图 3 显示了一个环境的生命周期。

图 3. 环境生命周期
环境生命周期

可度量的结果

基于 IBM SmartCloud Enterprise 提供的服务,一旦实现了持续集成,它就可以显著改善开发人员和测试人员的效率。您可在以下方面获益:

  • 将复杂环境精炼为一个简化的环境,这使开发人员拥有自己的环境变得更为可能。
  • 代码质量得以改进,缺陷率更低。环境可直接使用,开发人员无需浪费时间等待资源,可在代码签入之前自由测试代码并找到导致缺陷的根源。
  • 开发人员可直接共享代码更改。开发人员可捕获一个包含其新功能源代码的私有映像,其他人可基于包含代码更改的私有映像配备一个实例。
  • 可将特定的环境版本快速提供给开发人员和测试人员。以前,需要花费一定的时间才能准备好特定的环境版本,尤其对于以前的版本。现在只需几分钟。
  • 人力资源减少了。准备环可能是一项单调的工作,通常需要耗费人们大量的时间。现在他们从例行工作中解放了出来,可将精力集中在有价值的任务上。
  • 需要的硬件资源也减少了。可以在不需要时释放服务器。

让我们来看两个示例。

示例 1

假设我们的一个团队中有 3 种主要角色:一个构建人员、40 个开发人员和测试人员。

以下流程是构建人员的日常工作:

  1. 请求一个构建版本。
  2. 如果构建请求失败,则检查 Rational Team Concert 中的构建日志,确定它是构建错误还是编译错误(需要大量时间)。
  3. 部署构建版本。安装包、配置并重新启动服务器使更改生效。
  4. 执行构建验证测试 (BVT)。
  5. 如果 BVT 报告显示存在一些错误,构建人员会检查日志并尝试修复问题,或者联系开发人员来完成此项工作。

接下来,在完成 BVT 时,是时候让开发人员和测试人员将构建版本部署到其本地环境上了。如果任务与构建人员相同,则会导致花费与构建人员相同的成本和时间。完成此过程后,他们就可以开始他们的工作了。

首先,从描述中可以看到,开发人员和测试人员执行与构建人员相同的任务,因此他们必须安装了一个本地环境。安装本地环境需要大量的时间,这需要开发人员和测试人员付出额外的工作。

第二,开发人员和测试人员的本地机器的性能通常比构建人员部署构建版本所用的服务器更慢。因此,认为开发人员和测试人员花在部署构建版本上的成本与构建人员所花的成本相同,这样的估算是不准确的。实际时间会高出构建人员的成本。

第三,所有开发人员和测试人员都必须部署构建版本,这提高了发生将需要额外的时间来修复错误的故障的可能性。

只有在完成这些额外任务后,开发人员和测试人员才能开始他们自己的工作。开发人员和测试人员的效率会受到影响,额外的时间和资源成本将会非常高。此外,如果开发人员实现某项新功能,他将无法与其他人共享其环境。所以如果其他开发人员希望执行一项单元测试或基于此新功能进行开发,他们必须部署一个新构建版本,这会花更多的时间。

当使用 IBM SmartCloud Enterprise 时,结果可能差别巨大。

首先,构建人员的任务与之前完全相同;但是,第 2 和第 4 步可在一个 IBM SmartCloud Enterprise 实例上完成。而且构建人员应该完成一项不会花太多时间的额外任务:捕获该实例作为一个私有映像,与开发人员和测试人员共享该映像(参见图 4)。

图 4. 从每日构建实例创建一个私有映像
从每日构建实例创建一个私有映像

这一步似乎增加了构建人员的时间成本,但开发人员和测试人员的任务得到了简化,他们能够从构建人员所共享的私有映像配备一个实例,如图 5 所示。

图 5. 从私有映像添加一个实例
从私有映像添加一个实例

完成这项任务后,开发人员和测试人员就可以开始他们自己的工作。在这种情况下,开发人员和测试人员不需要安装本地环境,这节省了安装本地环境的成本。另外,他们不需要部署构建版本,所以不会导致性能下降或错误修复,配备实例所需的时间也非常短。

接下来,如果开发人员希望与其他人共享他们的新功能,则应该执行与构建人员相同的任务:捕获该实例作为私有映像并共享该映像。然后,如果其他人希望执行基于新功能的工作,只需从新映像配备一个实例(再次参见图 5);如果他们不需要部署新构建版本,那么这会花更多的时间。

可以很明显地看到,使用 IBM SmartCloud Enterprise 为开发人员和测试人员带来了好处。他们只需花费很短的时间来配备实例,然后便可开始他们自己的工作。所以团队的性能将得到改善,生产力也有所提高。

示例 2

在第二个示例中,让我们假设一个团队有一个项目,该项目包含多个构建版本,比如 DailyBuild20110507_ R 1.4 和 DailyBuild20110507_R2.0。

开发人员和测试人员需要同时处理两个构建版本。在使用传统的方法时,他们需要为这些构建版本维护多个本地环境,这增加了时间和资源成本,如示例 1 所示。

而且,如果某个新成员加入团队,该成员需要花费一些时间来了解如何维护本地环境。所有这些问题都会延缓项目的进度。

使用 IBM SmartCloud Enterprise,事情变得大不相同。所有维护成本都消除了,即使增加新成员也是如此。使用 IBM SmartCloud Enterprise,构建人员可以捕获所有每日构建版本的映像并共享它们,如果开发人员或测试人员需要处理特定的构建版本,他们惟一需要做的就是从特定映像添加一个实例。例如 DailyBuild20110507_ R 1.4(如图 6 中所示)。

图 6. 从特定构建版本添加一个实例
从特定构建版本添加一个实例

此外,完成工作后,如果不再需要该实例,开发人员或测试人员可以释放它。因此,可以消除维护成本,项目的效率和成本都将得到改善。


后续步骤和建议

持续集成具有诸多优势。要实现它们,则需要很快地向开发人员和测试人员提供环境。考虑到环境的复杂性,您需要改善您计划提供给开发人员的环境,让他们能够尽早地执行集成。

将环境分离到共享资源和独占资源中,这样做会更加有效。如果您有 30 名开发人员并可将服务器数量从 3 个减少到 2 个,那么这样做可以节省环境资源,从而有助于降低成本。

此外,更多组件意味着更多的潜在问题。减少环境中的组件数量可帮助开发人员将精力集中在他们专攻的构建版本上,您还需要考虑支持持续集成的不同的中间件组件和复杂度水平。

参考资料

学习

获得产品和技术

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Cloud computing
ArticleID=823750
ArticleTitle=使用持续集成更快地开发软件
publish-date=07022012