基于 CruiseControl 和 Rational 统一变更管理实现的软件开发中的自动化持续构建
2009-12-18 00:00:00 来源:WEB开发网通过 CruiseControl 和 UCM 集成的功能进行进一步优化
ClearCase 和 ClearQuest 本身都提供对 Perl 脚本语言的支持,CruiseControl 是基于 Ant 实现的,通过 Ant 也很容易可以执行构建服务器上和随 ClearCase 安装的 ccperl 编译器,通过调用 Perl 脚本,可以在 CruiseControl 中完成任何对 UCM 系统的操作。下面举两个具体的例子。
在单元构建产生构建目标加速构建
前面的章节提到在单元构建中采用了增量编译和自动测试。为近一步缩短时间加速构建完成,我们可以根据构建中修改的代码所属的模块进行部分模块编译,然后选择相关测试用例进行测试。
为达到这一目的,首先构建脚本和自动测试脚本需要支持模块化编译和测试,这里我们对脚本编写不作具体的讨论。我们需要解决的是如何在 CruiseControl 中得到本次构建中哪些代码被修改,从而产生构建目标。
首先在 cc-build-unit.xml 更新构建区域源代码(清单 2)后,启动构建之前,插入下面的代码调用 Perl 脚本生成构建目标。
清单 15. 生成构建目标 <exec executable="ccperl.exe" failonerror="false">
<arg line="getBuildTargetFromCC.pl ${cc.stream} ${cc.viewroot} ${ucmlastbuild}"/>
</exec>
这里 ucmlastbuild 变量是 CruiseControl 提供的,代表前一次成功构建的发生时间,格式是 dd-MMMM-yyyy.HH:mm:ss。根据这个时间,我们可以在脚本 getBuildTargetFromCC.pl 中利用 ClearCase lshistory 命令得到本次构建中哪些文件被修改,产生构建目标。
清单 16. 产生本次构建所有修改文件列表 my $full_list = `cleartool lshist -branch $cc.stream -r -nco -fmt
"%o~#~%n\\n" -since $ucmlastbuild $cc.viewroot/test.CompVOB`;
my @lines = split(/\n/, $full_list);
foreach my $line (@lines)
{
my ($type, $version) = split(/~#~/, $line); // Not consider operation like mkbranch, rmbranch or rmver
if ($type ne "mkbranch" && $type ne "rmbranch" && $type ne "rmver")
{
push @change_list, $version;
}
}
...
Tags:基于 CruiseControl Rational
编辑录入:爽爽 [复制链接] [打 印]- ››基于IP地址的vsftp服务器
- ››基于MySQL 水平分区的优化示例
- ››基于CentOS5的Linux下pptp和openvpn的搭建及配置
- ››基于JavaScript的网页版塔防游戏
- ››基于Android平台 QQ大战360手机游戏爆红
- ››基于Windows Azure的云计算应用设计
- ››基于AES算法实现对数据的加密
- ››基于SoPC目标板Flash编程设计的创建及应用
- ››基于SolidWarks齿轮机构的运动分析与仿真
- ››基于Windwos Server 2008故障转移群
- ››基于JavaScript的REST客户端框架
- ››基于JavaScript和CSS的Web图表框架横向对比
更多精彩
赞助商链接