介绍
对于基本的Continuum功能来讲,分布式建造是一个扩展,它让我们有能力处理多个独立的建造,超越单个服务器的处理能力。同时,让我们能够在多个不同的平台上执行建造,对所有的项目建造保持一个统一的视图。
架构
Continuum遵循一个使用XML-RPC的CS模式。然而,由于它使用 bi-directional XML-RPC 实现,我们使用Master和Build Agent来区分组件。
Master就是一个Continuum实例,它可以分配builds到已经注册的Build Agent。
Build Agent是一个Jetty-bundled webapp,监听来自Master的建造请求。
Master和Build Agents是一个一对多的关系。Master可有多个Build Agents,一个Build Agent只能有一个 Master。
行为
分布式建造发生在Continuum的项目组层次。当整个项目组在Master中建造,独立的项目被分发到单个Build Agent。
一个项目组是多个项目的混合,分布式的工作由下面几个步骤完成:
1. 在 Master,项目组的建造被触发。
2. 项目组的每一个独立项目都被标识,作为一个单独项目或者一个多模块项目。
3. 对于每一个独立项目,Master迭代已注册的Build Agent列表,查询其有效性。查询是一个 XML-RPC ping() ,跟在一个 getBuildSizeOfAgent() 调用之后。
4. 如果一个Build Agent 有效, Master 收集建造需要的信息(SCM URL ,项目ID,等等)后,在调用buildProducts(),将这些信息和它的队列中最小数值的任务传递到 Build Agent。
5. Build Agent 处理这个建造请求:这个建造被排队和执行。在执行之前,Build Agent搜先执行一个 SCM checkout 或者一个 SCM update,跟随着一个SCM 修改记录来获取最新更新的日期,然后开始正式的建造。
6. 到这一点,当建造运行,Master可以调用cancelBuild() ,返回一个临时的建造结果,调用 getBuildResult() 更新建造的输出(在Master)。
7. 建造后,Build Agent调用回调方法 returenBuildResult(),返回完整的建造结果给Master,Master集合后提供统一的项目视图。
设置
- 安装和配置一个或者多个Build Agent
- 在常规配置中,打开分布式建造的功能
- 将你的Build Agent添加到Continuum Master
- 将你的Build Agent添加到一个Build Agent 组
- 将你的Build Agent 组添加到一个建造环境
- 配置项目使用建造环境
- 确保项目组的本地仓库已配置好。在这个例子,它应该指向Build Agent 安装和运行的仓库的路径
警告:你需要拥有一个远程仓库来保存Build Agent创建的成品,以致其他的agents能使用新的成品。
局限
- 仅仅系统管理员可以打开和关闭分布式建造
- 如果指定的话,证件(例如svn证件)跟随一起传递,但如果服务器缓存被使用,需要在Build Agents单独完成
- 没有跟踪SCM的修改
- Build Agent需要一个配置的web接口
- 项目组的所有项目被分配到同一个Build Agent
将来增强的功能
- 远程建造器
- * 建造器在运程机器上安装,Continuum 管理者将发送动作来运行建造器。如果我们仅执行一个建造,一个动作将让所有的建造器(或者某些建造器,或者单个建造器)运行某些操作。动作将通过JMS发送,如果它们不想接收所有的动作,建造器可以应用一些过滤器。我们可以做一些并行的建造的同时,建造的顺序也需要遵从依赖树。要让依赖正确工作,每一个建造器需要使用一个中心本地仓库。可能我们能使用一个内部的Archiva。
- * Continuum建造器做好了接收所有命令的配置,用户可以运行多平台的建造,每一个建造都定义了执行。
- * Continuum建造器做好了接收某些项目类型的配置,用户可以根据项目组使用一个不同的建造器。在这里,项目的建造将被快速完成,因为命令被均衡到几个服务器。
- *
Continuum建造器可以为它能做的事情做好配置,用户可以在几台机器上安装建造器来均衡责任。在这里,可以运行一些并行的建造。∘ 当建造器工作完成,将发送一条信息给管理者,通知处理结束。
Continuum建造器可以为它能做的事情做好配置,用户可以在几台机器上安装建造器来均衡责任。在这里,可以运行一些并行的建造。∘ 当建造器工作完成,将发送一条信息给管理者,通知处理结束。
- * 当建造器工作完成,将发送一条信息给管理者,通知处理结束。
- * 通讯用的JMS,我们可以增加监听器来创建报告和统计,记录一些信息。
- 基于规则的分发
- * 下一个有效
- * 负载均衡
- * 目标环境匹配