Chromium的发布管理和代码管理

发布管理

谈Chromium的发布管理的前,先介绍Chromium的发布渠道(Release Channels)这个概念,这里有4种发布渠道:

一个从master拉出来的发布分支,其生命周期内最多可以处于4个发布渠道。比如它的版本号在a.0.b.(0~5)范围的时候,它就在Canary渠道发布。等到它的版本号在a.0.b.(5~20)范围的时候,它就可以往Dev渠道发布了。等到它的版本号在a.0.b.(20~60)范围的时候,它就可以往Beta渠道发布了。等到它的版本号在a.0.b.(60~120)范围的时候,它就可以往Stable渠道发布了。其实大多数发布分支在Canary渠道发布后因为各种原因停止继续更新了。一部分比较稳定发布分支的可以继续更新,然后Dev渠道发布就停止了。更少的一部分发布分支继续更新,直到Beta渠道才停止。最后每个大版本会有发布分支一直更到到Stable渠道。如下图所示:

chromium release

横坐标代表着时间,纵坐标代表着发布版本的质量。每条线就是一个发布分支。这个图有4个区域,最底层的白色区域属于Canary渠道,再上一层是红色区域属于Dev渠道,再上一层黄色区域属于Beta渠道。最上面的就是Stable渠道。 Chromium每6周更新一个大版本,如下图所示:

chromium calendar

比如某个feature想要随着大版本M发布出去,那么在这个M版本的发布分支拉出来2周前就需要冻结相关feature的开发。M版本的发布分支2周之后就会出现第一个Beta版本。6周之后会发布第一个Stable版本,同时拉出M+1版本的发布分支。想了解Chromium最近的发布情况,可以在这个页面https://www.chromium.org/developers/calendar上看到。

代码管理

Chromium的主仓库代码是通过git来管理的。git是个功能很强大的版本控制软件,对于不同的项目,人们设计出了不同的git分支模型,例如这篇文章介绍的http://blog.jobbole.com/81196/。我知道国内有些开发团队的做法是master分支的代码是最稳定的,需要发布的话就从master分支拉出一个发布分支,然后再在这个发布分支上做一些修改,开发feature,发布出去。最后再把这个发布分支的修改合并回maser。 Chromium这个项目有自己独特的分支模型。Chromium所有的代码的变更都是提交到master分支上,包括一些大的feature,而其他的分支上都不会直接开发代码。如果要拉一个发布分支,则把所有未完善的代码在发布分支上禁用掉。假如某个对外发布的分支上出现了bug,那么首先在master分支上修改,通过了编译之后,这个变更才允许被cherry-pick到其他分支。 听起来有些奇怪,Chromium开发团队这么做有他们自己的解释:他们是一个贯彻敏捷开发的团队。他们讨厌feature分支,feature分支意味着的代码相比master是比较老旧的,这让开发人员不愿意重构自己的代码,合并回master简直是灾难。Chromium的这种开发方式也让他们注重feature的模块化,以便他们在不同的发布分支上开启或者关闭某些功能代码。 Chromium所以的代码变更都先会提交到master分支上,假如某人提交的代码有问题,编译不过或者有严重的错误,就会阻塞其他的开发工作。因此在代码提交到master之前,他们会有严格的代码review和测试。通过代码review,把控代码的质量。另外代码review是公开的,任何人都可以看到。代码review也可以快速的帮助新加入Chromium开发的人员熟悉相关代码。代码正式提交到master分支之前,还需要通过一些单元测试,自动化测试。确保新提交的代码不会引入一些问题。Chromium通过buildbot来持续集成代码。 Chromium所有的发布分支都是在git的branch-heads命令空间里。通常获取Chromium代码是没有branch-heads的信息的。我们在运行gclient命令的时候加上–with_branch_heads参数才可以获取到相关的数据。–with_branch_heads其实就是在git仓库的config文件里加上了这行:

fetch = +refs/branch-heads/*:refs/remotes/branch-heads/*

如果我们想持续跟踪某个分支的开发情况,比如我们想跟踪最新的chromium 63 Stable版本的发布分支,则先在https://www.chromium.org/developers/calendar找到目前chromium 63 Stable版的版本号是63.0.3239.108,则其对方发布分支就是branch-heads/3239。

参考: