【IT168 专稿】
本文是Rational软件技术征文大赛(http://tech.it168.com/focus/200903/rationalgame/index.html)三等奖获奖作品。
1.前言
现在,软件开发已经不再像过去那样单纯的追求个人的效率,整个团队的开发效率受到了越来越多的关注。默契的团队协作和协调的开发步调是提高软件生产效率的关键。IBM Rational 推出的 Jazz 技术就是一个创新的团队协作平台,它集成了整个软件生命周期中的各项任务,并将成为下一代软件开发平台的基本框架。而Rational Team Concert (RTC) 则是第一个基于 Jazz 平台的产品,提供了包括代码控制、项目计划、项目build、工作任务、工作报告等的支持,让开发团队、测试团队、build团队都使用同一个平台来进行管理,能大大提高整个项目的有效管理,并且非常适合于采用敏捷开发模式团队。
我们将从Build团队的角度出发,以实际工作中的项目为背景,用实例介绍在敏捷软件开发中,Build团队怎样在RTC上Build一个完整的项目。
Build团队是连接开发团队和测试团队的纽带,开发人员编写的代码必须经过build人员的编译和发布才能给测试人员使用。特别是现在敏捷开发, Daily Build的开发模式得到了越来越广泛应用,build团队也相应的发挥着越来越重要的作用。
通常来说,Build团队主要负责build的计划,建立build环境,控制每个人在build树中的访问权限,编写Build脚本,执行和发布build报告,以及帮助使build中断的人修复build中的缺陷等任务。
那这些任务又是如何在RTC中体现及其使用的呢?
2.Jazz中的Build结构
2.1 结构介绍
Jazz技术平台的Jazz team build组件为软件开发团队的日常build工作提供了自动化、数据监控,以及状态感知等领域的全面支持。Jazz team build 提供了一个展现软件开发团队build全过程的模型,这个模型对于软件开发团队日常使用的多种build技术提供了支持。
Jazz包含了Jazz Build Engine和一个Ant Build工具,并使用其来向Jazz服务端发布日常的build信息。现在这个build工具与Ant脚本的兼容程度很高,开发人员可以非常方便地通过图形化的界面来进行控制。当然如果你愿意,你也可以使用任何一种能够调用Ant代码的脚本技术来完成这一工作,并且集成到Jazz team build之中。举个例子来说,一个软件开发团队可以使用Perl、DOS批处理文件,或者Make工具来与Jazz team build进行交互,以驱动和调用Ant代码。
你也可以使用任何Build Engine来运行Jazz build过程,但是使用Jazz Build Engine将大大简化你的build过程建立的复杂性。如果你计划使用一个不同的build引擎,首先用Jazz Build引擎建立一个简单的build过程,这样你可以熟悉Jazz build的基本概念,当你的简单build工作起来以后,你可以选择性的使用其他的build引擎,例如Build Forge build引擎。这体现了Jazz team build的灵活性。
典型地,一个软件开发团队将拥有一个专属的build系统来执行build工作。Jazz Team Server就非常适合担任开发人员和build系统之间沟通和联系的角色。以下的一些与build相关的条目都存贮于Jazz中央仓储之中并对build过程提供支持。
- Build definition :定义一个build过程,比如每周一次的项目集成build过程,以及build的各种参数;
- Build engine :运行在build服务器上的build系统,负责接受build请求,发布build消息等;
- Build request :向build系统发送的执行build过程的请求;
- Build result :build过程输出的执行结果。
所有build相关的项目都隶属于同一个project area。build相关的操作也是由项目处理过程来进行管理。对应地,你也可以使用Jazz客户端来执行以下的任务:
- 提交一个请求来执行一个build definition;
- 检查build过程的执行情况;
- 查看已经完成的build过程的输出结果,比如日志,下载文件和build过程中生成的文件。
2.2 典型的Jazz build过程
了解Jazz build系统的结构和原理后,我们来看看建立一个典型的Jazz build过程。以下的步骤描述了应该怎样建立和运行一个典型的Jazz build过程:
(1)开发团队的版本发布工程师在build计算机上安装Jazz Build Engine和Ant工具。这些是Jazz Team服务及的客户端和必须工具。除此之外,没有需要在build计算机上运行的服务。
(2)版本工程师在Jazz中央仓储服务器上创建一个相应的build引擎。然后指定这个build引擎需要对哪一个build definition提供支持。
(3)版本工程师在Jazz中央仓储服务器上创建build definition以及对于每一个build definition需要创建一个build脚本。典型地,一个build脚本就是一个由Jazz源代码控制的文件。
(4)版本工程师在build计算机上启动Jazz Build引擎。Build引擎会从Jazz Team服务器上获取已经提交的build请求(build request)。
(5)Build引擎获取一个build请求来运行build过程。Build request标识了build definition可以使用属性配置文件设置来覆盖缺省的设置。Build definition会与build脚本运行的build引擎进行通信。
(6)Build引擎执行build过程。
(7)Build脚本运行Ant任务,从Jazz Team服务器上获取源文件进行编译,报告build进度,创建build输出,包括生成文件,日志和链接等。这些build输出存储在中央仓储中,开发人员可以非常方便地查看相应的日志已经build生成文件。
3.实例介绍
我们以工作中一个实际的项目为背景,创建一个实例来介绍在RTC中build的全过程。
创建实例项目Quickr_Demo,我们主要介绍build部分,所以省略项目源代码创建细节,项目源码结构如下图:
项目中添加项目成员buildadmin处理build任务。Build过程主要有以下步骤:
(1)创建build definition;
(2)创建并启动build engine;
(3)请求build;
(4)build完成和结果查看。
3.1 创建build definition
build definition有4种模板:Ant、Command Line、Generic和Maven。我们的项目使用特有的build工具,提供了使用命令build的方式,所以此处选择Command Line 模版,build definition取名Quickr_Demo build。其他3种模板的使用方式类似,可以根据项目实际情况选择。
RTC build可以定时执行也可手动执行,在build definition的Schedule Tab中可以定义定时执行的参数:
在build definition中会用到多个参数,可以在Properties Tab中先定义这些参数,以便在使用的时候引用:
在Jazz Source Control Tab中可以配置build中使用的workspace, 源代码装载的地方以及build时包含的组件。
当然,这些内容也可在具体项目的build命令脚本中指定。
build definition中最后一部分是配置build执行的命令及其参数。这是由项目的具体情况决定的。在本项目中我们配置如下:
3.2 创建build engine
build definition只定义了build时的各种参数,RTC中需要由build engine来处理build请求、管理build过程以及发布build结果。build engine中需要指定项目以及它支持的build definition。
刚定义好的build engine还没启动,build engine页面有对应的提示. 这需要下载Build System Toolkit,到buildsystem/buildengine/eclipse目录下,运行如下命令启动build engine:
jbe -repository repositoryURL -userId username –pass password -engineId engine
例如我们的项目中命令为:
jbe -repository https://localhost:9443/jazz/ -userId buildadmin –pass password -engineId engine_1
再打开之前定义的build definition Quickr_Demo build,在其中选择engine_1为支持它的build engine。
3.3 请求build
build definition和build engine定义好后,就可以请求build了。右键点击Quickr_Demo build,选择Request Build,然后提交即可。
我们可以看到Build Tab中的build状态,不断刷新以待build完成。
3.4 Build结果
Build完成后,双击build记录可看到整个build的详细结果:
单击Show Change链接可以查看此次build中包含的change sets, 单击log链接可查看build过程详细日志。还可以创建此次build为一个release,发布到jazz平台上。在我们的项目中,build脚本负责把build发布到一个具体的地方。
4.总结
Jazz平台对build提供了灵活的支持,整个build系统主要分为build参数定义(build definition)和build引擎(build engine)两部分,参数定义中用户可以任意选择自己喜好的脚本语言,build引擎部分也可自行定义。本文中我们从Build Team自身角度出发,结合实际工作中的项目背景为例,介绍了Jazz Build系统的结构及使用方法。