Cruise入门-概念篇

来源:互联网 发布:吉他谱大全软件 编辑:程序博客网 时间:2024/05/03 01:32
Cruise终于在今天(2008年7月28日)正式发布了。

上星期六在Beijing OpenParty上讲了一个关于持续集成的Session,主要内容是持续集成在软件开发生命周期中的作用,同时谈到一个软件从测试完成到正式上线还有多少工作要做。应在座同学的要求,谈了一些Cruise的新特性。还是言归正传吧。

一、Pipeline(构建管道)

众所周知,Cruise引入了Pipeline的概念,但它到底是什么呢?说来简单,一个代码集内,所有代码从编译开始直到达成客户的最终目标所要经历的过程就可以被看作一个Pipeline。

举例来说,假如某项目组正在开发一个J2EE的WEB应用,而这个应用是在一套本公司内部已开发好且相对稳定的公共组件及接口(以下称为A)为基础,根据用户定制的实际业务需求(以下称其为B)来完成的,那么,其中的公共组件及接口可以被看作是一个Pipeline(以下称为PA),而那些因业务需求而开发的代码可以看作是另一个Pipeline(以下称为PB)。对于A的任何改动都需要经过编译、自动化的单元测试、功能测试(可能还会的其它类型的测试),最终发布某个新的稳定版本,而对于B的任何改动或与A的新版本集成,使B都需要经过编译、自动化的单元测试、功能测试(可能还会的其它类型的测试),最终发布部署到客户现场,上线运行。这两个过程就象两个管道,任何代码的变化,都会(也应该)通过这两个管道,合格的代码会从管道的另一端变为成品,而不合格的代码就会卡在管道的某一个点上。

简单一句话:一个Pipeline就是一个代码集的开发与部署生命周期的体现。

二、Stage(不太好译,先译为“阶段”)


简单来说,Stage就是存在于Pipeline之内的,一组Job(构建集成工作)的集合。

举例来说(继续用上例),在PA中,单元测试需要运行10分钟,而功能测试要运行30分钟,端到端的部署需要10分钟,端到端的测试要运行50分钟,测试人员的探索性测试不能定时,编译发布需要3分钟。在实际工作中,很难让开发人员等到所有测试都运行完后再继续开发。此时可用Stage来管理构建集成工作。Cruise的用户可以将单元测试、功能测试、端到端的部署、端到端的测试、测试人员的探索性测试及编译发布分别定义成六个Stage,按顺序排列。在版本一致的前提下,Cruise将使用户所提交的代码依次走过所有的Stage。

简单一句话:一个Pipeline中,可以有多个Stage依次被执行;每次构建的Pipeline会保持各Stage的代码运行在相同的版本号上。

三、Job(构建集成工作)

一个Job是存在于某个Stage之内的一个构建集成工作。

举例来说(继续用上例),在PA中,单元测试Stage有100个测试,如果全部做为一个Job(例如 ANT all)来运行,需要10分钟。为了提高反馈速度,可以将其分成两个Job(例如 ANT component1Test 和ANT component2Test),这样的话,这两个Job就有机会并行执行啦!(如何并行,待会儿再说)

简单一句话:一个Stage中,可以有多个Job并行被执行;每个Job独立运行在Agent上面,Stage所有的Job都通过才能触发下一个Stage执行。

四、Agent(构建执行机)

一个Agent就是一个用于做某些Job的机器。

举例来说(继续用上例),在PA中,单元测试Stage的两个Job都运行在JAVA1.5上, 使用ANT进行构建。而且,恰好有两台机器安装有JAVA1.5,那么将这两台机器安装上Cruise Agent端,并向同一个Cruise Server请求工作。只要设置好资源,那么这两个Agent就可以分别请求其中的任意一个Job来执行啦。

简单一句话:多个Agent可以注册到同一个Server上;每个Agent请求Job时,Server都会按需来为其分配工作的。

五、Resource(资源)


一个Resource就是一个资源声明。

举例来说(继续用上例),Cruise的用户将这两个Agent的Resource指定为JAVA1.5,并将PA单元测试Stage中两个Job的Resource也指定为JAVA1.5,那么这两个Agent请求工作时,Cruise Server就会根据资源匹配规则,给它们相应的Job来执行啦。

什么是资源匹配规则呢?如果Agent没有资源声明,则其只能分到那些没有资源要求的Job来做;没有资源要求的Job可以在任意一个Agent上来执行;有资源要求的Job一定在提供这些资源标签的Agent上执行,而此时,该Agent上的资源标签可能会多于Job所要求的资源;如果多个Agent具有相同的资源,Server将随机将Job分配给其中某个空闲的Agent来执行。

简单一句话:一个Resource就是一个Tag;只要它们符合资源匹配规则,相应的Job就可能运行该Agent其上。
 
到这里,有些人可能会产生疑问,人工的探索性测试也要在Pipeline中吗?PA和PB是有关联的,如何处理这样的关联呢?嘿嘿,请听下回分解。


原创粉丝点击