使用Cruise和Mercurial实现个人预提交,提高生产效率及整体自动化测试成功率

本文介绍了一种名为个人预提交(Personalbuild)的做法,即在代码提交前先在本地构建和测试,确保通过后再提交到中央代码仓库。文章详细阐述了在等待长时间的单元测试过程中存在的问题,以及通过设置个人构建持续集成服务器来加速测试反馈的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是个人预提交(Personal build)?

Personal build简单来说,就是开发人员在代码提交之前,先要自己在本地运行一次构建和测试代码,保证本地没有测试失败后,再将其提交到中央代码仓库。

Personal build的痛处在哪里?

“提交代码之前,必须在本地运行并通过单元测试”是敏捷团队的原则之一。而随着新功能的增加,我们的单元测试越来越多,运行时间当然也就越来越长,那么开发人员等待的时间就长。


因此,正如在 InfoQ 上的一篇 关于持续集成实践的文章 所 述,我们在每台PairStation上都安装了一个虚拟机来运行自己提交前的单元测试。然而,每台虚拟机都运行自己的单元测试,也就是说,在运行时间上 没有什么大的改进,还是需要三十分钟左右(因为还是在一台机器上运行),其好处是执行本地单元测试的同时,开发人员可以继续他们自己的工作,但本地单元测 试的时间并未缩短,反馈时间长的问题还是存在。

如何解决这个问题?

在一台机器上新安装一个 Cruise ,并在Pairstation的虚拟机上安装了一个 Cruise Agent ,让它连上这个Cruise,这样就成了个人构建持续集成服务器。

另外,在 目前尚未发布的Cruise R1.3 中,有个新功能就是:多个Agent可以运行于同一个机器上。因此,在那台安装有CruiseServer的PersonalBuild服务器上同时又启动了四个Agent。

个人构建持续集成服务器就有至少八台Agent可以同时工作啦。如图1所示。
图1

由于团队使用的是 Mercurial (分布式版本控制服务器),所以开发人员所要做的准备工作就是:
(1)在自己的机器上再Clone一个本地的Repository,运行hg serve 启动该Repository的http服务。
(2) 在Personalbuild Server上建立自己的一个Pipeline,该Pipeline的materials指向这个新建的Repository。且Pipeline上只有 一个Stage,同时利用Test-load-balancer将单元测试分成多个Job加入到该Stage中。

这样,利用Cruise的Job并行化和Agent的分布化,以及Mercurial的特点,使得每个人都相当于拥有八台Agent为其工作。

而建立PersonialBuild后的开发流程大致为如下步骤(见图2):
(1)开发人员对本地代码进行修改;
(2)开发人员将代码放到本地预提交仓库中;
(3)个人构建服务器发现本地预提交仓库的代码变化,触发个人的Pipeline进行构建;
(4)开发人员重复(1)和(2),并关注自己的个人构建Pipeline的运行结果;
(5)个人构建服务器重复(3);
(6)开发人员使自己的最后一次提交在个人构建服务器上通过所有测试;
(7)开发人员将所有修改提交到中央代码仓库中;
(8)团队集成构建服务器发现这些变化的代码,触发团队Pipeline的构建。
 
图2

其好处在于:

(1) 不需要太多的准备工作(原本就使用Mecurial);
(2) Cruise的分布式加快了个人构建与测试的反馈速度;
(3) 更大的灵活性(开发人员可以有选择性的向中央代码库提交任意指定的本地版本);
(4) 促进开发人员频繁提交,运行测试;
(5) 在团队持续集成环境中,失败的次数会大大减少;

具体准备工作:

(1) 建立本地代码库的复本
        hg clone cruise cruise-personal
        cd cruise-personal
        hg serve
(2) 启动一个agent,指向PersonalBuild 服务器
        mkdir cruise-personal-agent
        cp cruise/target/cruise-agent-1.3/* cruise-personal-agent
        cd cruise-personal-agent
        java -jar agent-bootstrapper.jar ${your personal build IP address}

(3) 在建立一个pipeline,使其Materials指向第1步中建立的本地代码库复本

具体工作过程:

(1)  频繁向本地checkin代码;
(2) 需要个人构建时,使用命令'hg push ../cruise-personal'
(3)个人构建服务器会发现代码的改变而构建。
(4) 当需要向中心代码库提交时,使用命令'hg pull --rebase'

注意:

当我们想要运行个人构建时,如果使用命令 'hg push ../cruise-personal',你会得到信息说‘creating multiple heads’。假如你使用命令 'hg push -f ../cruise-personal' (注意那个 -f),就会强制Push并创建multiple heads。
在中心代码库上建立多个head是非常不好的。但是,对于个人的本地复本来说,无所谓。实际上,Cruise会发现并更新到最新的head上,而忽略旧的head。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值