写点什么

Mozilla 发布 Firefox 的流程

  • 2014-07-10
  • 本文字数:2067 字

    阅读完需:约 7 分钟

从 2004 年开始,Mozilla 发布了很少几个版本的 Firefox,到 2010 年 7 月,版本号达到了 4.0。但是从 2011 年开始,Mozilla 学习 Google,改变了他们的发布周期,现在的版本号是 30。一直以来,发布工程师团队不断改进着做一个新版本浏览器的流程。工程师四人小组——Chris AtLee、Lukas Blakk、John O’Duinn、Armen Zambrano Gasparian,在Dr. Dobb’s 杂志上发表了一篇文章,描述了发布流程的细节,在这里我们将会把这个流程的精华展示给大家。

Mozilla 考虑到他们的浏览器可能会有的安全漏洞,设计了一套发布流程,可以快速地制作一个“安全修复”版本,这个版本会迅速地推送给用户,以便及时修复已知的漏洞。整个流程会尽可能地自动化,减少“人力介入”,并改进“健壮性和开发周期”。安全修复版本和常规版本都会用到这个流程。每个版本发布后,Mozilla 会做一个事后分析,看看是否有可以改进的问题。在下一个版本发布前,发现的问题会很快被修复。

发布流程由一名发布协调人员来发起,这个人需要“参加分类会议,理解这个版本中各个修改的来龙去脉,公正地仲裁 bug 严重性等级方面的争议,批准合入最新的修改,以及做出取消发布的艰难决定。”

Mozilla 以前通过 IRC 或者电话来发出构建新版本的命令,但他们遇到了问题,后来改成了发送电子邮件给发布流程中涉及的所有人,邮件的标题含有文本“开始构建 + 产品名称 + 版本号”。这封电子邮件包含了即将构建和发布的这个版本的源代码的详细信息,如果代码仓库是基于时间戳的,信息中包括代码对应的时间和时区。

整个发布过程包含以下步骤:

  1. 发布协调人员发出“开始构建”(Go-to-Build)的电子邮件
  2. 开始打标签——像 FIREFOX_30_0_RELEASE 这样的标签被打到大约 85 个代码库中——包括产品、本地化字符串、自动发布用到的代码和工具——这些都是创建一个特定版本的浏览器所需要的。整个过程持续大约 20 分钟,因为代码库实在太多,Mozilla 想并行处理打标签过程,每个库单独一个进程,这样可以把时间缩短到 5 分钟。
  3. 构建开始——许多构建版本协同运行起来,每个发布平台一个,加上刚刚打完标签的所有源代码。编译结果被上传到 ftp.mozilla.org 上。这个步骤还包括了本地化“重新打包”:en-US 区域的版本被解开,然后把所有 en-US 字符串替换成对应区域的字符串,再重新打包。
  4. 签名——二进制文件要签名。对于 Windows 来说,所有的 EXE 和 DLL 都要签名,包括安装程序本身。然后再生成一系列的 MD5 和 SHA1 校验和,这样镜像服务器可以校验它们下载的文件是否正确。签名在一台与外界隔绝的专用服务器上进行。密码、密钥和密钥库只会在发布工程师们私人之间的安全通道内传播。
  5. 测试——对于安全修复版本来说,测试人员会对导致升级版本的安全漏洞进行手动测试。如果问题还在,必须先修复,整个构建流程要重来。
  6. 制作升级包——升级包被制作出来,准备就绪后,浏览器的更新程序会去下载它们。有大量的升级包要做,每个平台、每种语言、基于每个旧版本都要有一个。
  7. QA 测试——一旦签过名的版本准备就绪,社区成员、外包人员和 Mozilla 员工会对它进行手动测试,他们也会测升级包。与此同时,自动化的功能测试流程也会开始。如果一切正常,QA 团队最终会签发这些版本和升级包。
  8. 更新镜像——升级包会被推送到世界各地的镜像服务器上。整个流程完成后,发布协调人员会发送一封电子邮件,宣布新版本准备就绪,这封邮件带有“上线”(Go Live)字样,然后发布工程师们更新网站和 FTP 服务器,确保它们指向最新的版本。

在这套发布流程的演进过程中,Mozilla 也吸取了一些教训:

  • 要成功发布一个版本,在流程中有发言权的相关各方都要考虑到,不管是技术的还是非技术的,这很重要。
  • 使每个人都意识到这个发布流程,以及时间都花哪儿了。一开始,Mozilla 内部人员认为一个新版本的发布仅仅是发布工程师的事,但实际上很多其他人都和这个流程有关,他们都对某些环节负有责任。
  • 发布流程中出现的大多数问题都是这些因素有关,“团队间沟通不畅;缺乏明确的牵头人;以及发布安全修复版本带来的压力、疲劳和焦虑”。“使用简单明了的方式传递信息,消除人为的误解”,这种方法解决了这个问题。
  • 团队稳定性也是个问题:太多的工程师干了一段时间后就离开了发布团队,其他顶替他们的人,也只是晚点走而已。这导致了“缺乏准确且与时俱进的文档,这意味着对发布流程的大多数技术理解仅靠民间口口相传来维护,随便一个人离职后,这种口头经验就遗失了”。在 Mozilla 开始重视发布版本这件事情后,情况就改观了,工程师们开始觉得“Mozilla 有改善现状的计划,团队终于能在一定程度上掌控自己的命运了”。
  • 以小步快跑的方式改进发布流程,每个新版本做得比以前好一点。随着自动化流程的改进,团队也能腾出时间来进一步改进流程。

这几位作者提到,发布流程已经改进到相当不错的程度,Mozill 发布最近 8 个安全修复版本只用了两天时间,这几个版本用于定位 Firefox 用到的一个第三方库中存在的安全漏洞,之前的测试并没有覆盖到这个第三方库。

参考原文链接: http://www.infoq.com/news/2014/07/release-process-mozilla-firefox

2014-07-10 12:361891
用户头像

发布了 77 篇内容, 共 38.9 次阅读, 收获喜欢 26 次。

关注

评论

发布
暂无评论
发现更多内容

太厉害了!腾讯T4大牛把《数据结构与算法》讲透了,带源码笔记

编程susu

Java 编程 程序员 计算机 技术宅

本科毕业六年,裸辞备战三个月,四面阿里巴巴定级P7

编程susu

Java 编程 程序员 面试 计算机

正经人一辈子都用不到的 JavaScript 方法总结 (一)

编程三昧

JavaScript 大前端 8月日更 模板字符串 String.raw

按下数字化转型快进键!DataPipeline与星环大数据平台完成产品兼容互认证

DataPipeline数见科技

实时数据引擎系列(二): 批流一体的数据

tapdata

JS遍历循环方法性能对比:for/while/for in/for of/map/foreach/every

zhoulujun

foreach map for for in

从λ演算到函数式编程聊闭包(1):闭包概念在Java/PHP/JS中形式

zhoulujun

闭包 闭包函数

使用明道云搭建电梯维修与保养系统

明道云

网络上数据通信过程

一个大红包

8月日更

模块(一)什么是架构

我是一只小小鸟

混合模型与期望最大化算法(三)

Databri_AI

算法 混合模型

3 分钟了解 JSON Schema

程序员鱼皮

Java json 数据库 大前端 后端

下载超过10万次?阿里大佬的《高并发、性能调优笔记》一战封神

Java架构师迁哥

Go- 闭包函数

HelloBug

模块一

树建

架构实战营

每天学习10个实用Javascript代码片段(五)

devpoint

定时器 JavaScrip 8月日更

JIT-动态编译与AOT-静态编译:java/ java/ JavaScript/Dart乱谈

zhoulujun

dart JIT AOT 动态编译 静态编译

LeetCode刷题09-简单 回文数

ベ布小禅

8月日更

解决生命科学研究痛点,北鲲云计算着力打造行业解决方案

北鲲云

Python Qt GUI设计:将UI文件转换为Python文件的三种妙招(基础篇—2)

不脱发的程序猿

Python qt GUI UI文件转换为Python文件

Go- 函数执行时间

HelloBug

Go 语言 函数执行时间

特斯拉依旧头铁坚持视觉路线,激光雷达会笑到最后吗?

脑极体

Go,一文搞懂 defer 实现原理

微客鸟窝

Go 语言 8月日更

架构实战营1期模块6作业——微服务架构

tt

架构实战营

数据挖掘经典算法之K-邻近算法(超详细附代码)

Python研究者

8月日更

从λ演算到函数式编程聊闭包(2):彻底理解JavaScript闭包规则

zhoulujun

闭包 闭包函数

Go- 递归函数

HelloBug

递归 Go 语言

网络攻防学习笔记 Day115

穿过生命散发芬芳

网络安全 8月日更

微信业务架构图 & 学生管理系统方案

缘分呐

架构 设计

客户需求难以推进和实现?企业如何有效管理项目需求?

优秀

项目管理

ShardingSphere Proxy 初步体验

ShardingSphere-Proxy

Mozilla发布Firefox的流程_Mozilla_Abel Avram_InfoQ精选文章