Mozilla 构建系统(转)
英文来源:Mozilla’s Build System
中文出处:开放博客,由灰狐翻译小组制作
Mozilla 构建系统是一个非常酷的分布式系统,运行在BuildBot上。系统能在每次修改后自动重新构建和测试代码树。
目前,整个构建基础设施使用了大约 1,000 台机器并分组在3个 pools 池中,每个 pool 都有数台Build Masters 和很多台 Slaves 组成:
构建池(Build Pool) 处理所有更改触发的构建,除了那些要去试验的构建:
- 4 台 Build Masters
- 大约 300 台 Slaves
试验构建池(Try Build Pool) 处理所有试验构建:
- 1 台 Build Master
- 大约 200 台 Slaves
测试池(Test Pool) 处理所有的测试,包括试验(Try):
- 7 台 Test Masters
- 大约 400 台 Slaves
它是如何工作的?
hg poller 每隔几分钟就在 hg.mozilla.org 仓库里寻找新的更改。这些更改通过构建调度者(Build Scheduler Master) 获得,并创建构建请求(Build Requests),为每一个支持的平台都创建一个。这些构建请求以待定的方式进入调度数据库。Build Masters 寻找待定的构建请求然后当有空闲Slaves就分配给它们。
为构建完整,Build Master 将状态更新到调度数据库中。另外,测试调度者(Test Scheduler Master) 为相应的测试创建测试构建请求。
接着,测试构建请求由 Test Masters 获得并分配给空闲的 Slaves。当测试完成,Test Master 更新它们的状态到调度数据库中。
每个 Build Master 和 Test Master 控制它们自己的一组 Slaves。
构建运行生命周期
每个推向 mozilla-central 的请求,如果成功的话,会生成总数为 168 个构建请求(截至2010年10月,但在未来会有所变化),其中 10 个构建(支持10种平台),108个单元测试和50个 talos tests。所有这些构建请求组成一个 Build Run。
10种平台的构建都需要有一套自己的测试请求。仅当相应的构建成功完成这些测试才被创建。这就意味着如果构建失败,这些测试将不被创建,Build Run 也不会有168个构建请求,
Build Run 生命周期中有两个非常重要的测量:等待时间(Wait Time) 和 端对端时间(End to End Time)。
等待时间测量在队列中的构建请求在开始执行前要等待多长时间,更具体的讲,它测量生成构建请求改变的时间戳和构建请求赋予空闲 Slave 的时间戳之前的时间差。(见上面 Build Run 的生命周期图)
端对端时间测量一个 Build Run 完成需要多长时间。也就是说,触发这个 Build Run 改变的时间戳和最终生成构建请求的时间戳之间的时间差(换句话说,就是当所有的构建和测试完成)。(见上面 Build Run 生命周期图)
正常情况下 mozilla-central 的端对端时间会少于4小时,但是随着系统负载的增加时间会有所延长。
Mac minis 垒的墙
构建是在一个虚拟机组合之上完成的,包含 1U 服务器,xserves 和 Mac minis,并且所有的测试都是在 Mac Minis 上完成的。
这堵 mac minis 墙是由 400 个 Mac minis 盒子垒成的,它被放在发布工程师在山景城的办公室里。
http://kb.cnblogs.com/page/100944/
Mozilla 构建系统(转)的更多相关文章
- Google分布式构建软件之二:构建系统如何工作
分布式软件构建第二部分:构建系统如何工作 注:本文英文原文在google开发者工具组的博客上[需要FQ],以下是我的翻译,欢迎转载,但请尊重作者版权,注名原文地址. 上篇文章中提到了在Google,所 ...
- C/C++构建系统 GNU autotool
我们在网上经常可以看到c/c++开源的项目,其中很多都是使用GNU的构建系统进行配置和编译的,如果按照规范构造这些的步骤,有一定的门槛和复杂度,下文把关于auotools系列的工具和概要的流程简要汇总 ...
- C/C++构建系统 -工具汇总
关于构建系统可以先参考百科 http://en.wikipedia.org/wiki/List_of_build_automation_software http://www.drdobbs.com/ ...
- [系统集成] Android 自动构建系统
一.简介 android app 自动构建服务器用于自动下载app代码.自动打包.发布,要建立这样的服务器,关键要解决以下几个问题: 1. android app 自动化打包android 的打包一般 ...
- 团队项目·冰球模拟器——cmake 自动化构建系统的配置文件的编写
1 前言 考虑到命令行界面下编译程序并不如在 IDE 那么直观,再考虑到各位队友对 Linux 并不熟悉,如何大幅度地减轻整个项目的开发复杂度就是一个很重要的问题. 在 Linux 下有个很古老但很有 ...
- GYP构建系统总结
GYP,Generate Your Project,一个Google开源的构建系统,最开始用于Chromium项目,现在一些其他的开源项目也开始使用GYP,如v8和node-gyp.不管怎样,这仅仅是 ...
- [Gradle] 在 Eclipse 下利用 gradle 构建系统
转载自:http://www.ibm.com/developerworks/cn/opensource/os-cn-gradle/ 构建系统时候常常要用到 Ant, Maven 等工具,对于初学者 ...
- spring+springmvc+mybatis构建系统
今天和大家分享的是spring+springmvc+mybatis搭建框架的例子,说到这里不得不说现在市面上一流大公司还有很多用这种架子,创业型公司大部分都用springboot集成的mvc+myba ...
- Android Studio的构建系统:Gradle
原文作者:youxiachai <用Gradle 构建你的android程序> 前言 android gradle 的插件终于把混淆代码的task集成进去了,加上最近,android st ...
随机推荐
- android windows 上JNI编程
昨天学习windows上的JNI编程,JNI说白了就是java和c语言的一个互相沟通的桥梁.java能够调用JNI来完毕调用C语言实现的方法. JNI的全称是(Java native interfac ...
- srm 533
250 Description 给你一串数字序列,每次删掉第ii个数.获得权值w[i−1]×w[i+1]w[i-1]\times w[i+1],求最后剩下第一个和最后一个数获得的最大权值和 Solut ...
- Visual Studio跨平台开发实战(2) - Xamarin.iOS基本控制项介绍
原文 Visual Studio跨平台开发实战(2) - Xamarin.iOS基本控制项介绍 前言 在上一篇文章中, 我们介绍了Xamarin 以及简单的HelloWorld范例, 这次我们针对iO ...
- client对象层次和0级DOM
刚開始学了两天JS,闲着无聊,顺手画了张图
- BZOJ 2002 HNOI2010 弹飞羊 块
标题效果,LCT解释版本:见 http://blog.csdn.net/popoqqq/article/details/38849471 如今,用一只手滑动块,并再次改写这个问题0.0 块短啊 将进入 ...
- 状态压缩dp(hdu2167,poj2411)
hdu2167 http://acm.hdu.edu.cn/showproblem.php?pid=2167 给定一个N*N的板子,里面有N*N个数字,选中一些数字,使得和最大 要求任意两个选中的数字 ...
- WPF对于xml的简单操作(下)绑定ListView
上个月做好的,电脑给盗了,没及时存在网盘,也及时发到随笔,于是乎悲哉!搞了一个上午终于绑定好了,有时候就是这么眼瞎,Path和XPath全瞎了,摸滚了一个上午,赶紧的随笔跟上先. <ListVi ...
- Windows Phone开发(28):隔离存储B
原文:Windows Phone开发(28):隔离存储B 上一节我们聊了目录的操作,这一节我们继续来看看如何读写文件. 首先说一下题外话,许多朋友都在摇摆不定,三心二意,其实这样的学习态度是很不好的, ...
- 企业邮件系统-Postfix安装使用
Postfix是目前流行的一套邮件传输代理软件(MTA),其作者Wietst Venema最初开发这套软件时就对总体设计.扩展能力.可用性及系统安全等方面进行了充分的考虑.由于Postfix在稳定.效 ...
- 阶乘因式分解(一)(南阳oj56)
阶乘因式分解(一) 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描写叙述 给定两个数m,n,当中m是一个素数. 将n(0<=n<=10000)的阶乘分解质因数, ...