工程实践

发布候选版本(RC):含义、版本号写法与运作方法

阅读约 1 分钟

发布候选版本(RC)是团队认为已经可以发布的一个构建。它功能齐全,已通过计划中的测试,并且除非有人发现严重到足以阻塞发布的缺陷,否则它会原封不动地成为正式版。这个标签是对该构建的一项承诺:不再加新功能,只修复阻塞问题。如果需要修复,团队就切出一个新的候选版本,重新开始计时。

阶段功能受众预期状态
Alpha仍在添加内部团队不完整,已知缺陷很多
Beta已完成或接近完成志愿者和选定的客户可用,预计会有缺陷
发布候选版本已冻结测试人员和早期使用者认为已就绪,只修阻塞问题
正式发布(GA)已冻结所有人与最后一个 RC 是同一个构建

软件中的发布候选版本是什么?

它是正式发布(GA)之前的最后一个预发布阶段。其思路是,这个构建是最终版本的候选,发布时是把同一个构建提升为正式版,而不是另做一个新的。维基百科关于软件发布生命周期的文章描述了同样的 alpha、beta、发布候选和正式发布的顺序,这些术语在开源项目和软件厂商之间被广泛理解。

beta 和发布候选版本有什么区别?

beta 仍然允许变动。功能可以调整,接口可以变化,目标是弄清缺了什么、错在哪里。发布候选版本已经停止了这类改动,目标是确认没有任何问题阻塞发布。实际的检验方法,是看团队怎么处理一份缺陷报告。在 beta 阶段,一份报告可能带来设计上的改动。在 RC 阶段,只有当缺陷会阻塞发布时,报告才会带来修复,其余的一律排进下一个版本。

如何给发布候选版本编版本号?

在你即将发布的版本号上加一个预发布后缀。按语义化版本控制的规定,连字符加上用点分隔的标识符表示预发布,所以 2.4.0 的第一个候选版本是 2.4.0-rc.1,下一个是 2.4.0-rc.2,正式版就是不带后缀的 2.4.0。

优先级按规范来:2.4.0-rc.1 排在 2.4.0-rc.2 之前,任何预发布版本都排在正式版之前。由于标识符是逐个比较的,数字按数值比较,所以 rc.10 排在 rc.9 之后。alpha、beta 和 rc 这几个名字按字母顺序排序,恰好也是正确的先后次序,这也是团队采用它们的原因之一。每个候选版本都要在 git 中打上标签,做法见 git 标签与发布,这样确切的提交就有了记录。

发布候选版本的退出标准是什么?

在切出第一个 RC 之前就把它们写下来。一套可行的标准如下:

  • 自动化测试套件在所构建的那个确切提交上通过。
  • 从上一个版本升级的路径,已用接近真实的数据测试过。
  • 已知问题都已分级处理,没有一个被评为阻塞。
  • 性能和错误率与上一个版本相比,差异在约定的范围内。
  • 发布说明已经起草,并对照最终的变更清单评审过。
  • 存在回滚路径,并且有人读过它。

当某个候选版本满足每一条时,这个候选版本就是正式版。只要有任何一条不满足,修复就会产生一个新的候选版本,检查也要重新开始。这套流程的七步版本,以及每一步的负责人,见发布管理流程。

RC 通过之后,该怎么处理这个构建?

提升同一个制品。不要从标签重新构建,因为重新构建可能引入不同的依赖或编译产物,而你做过的测试针对的是原来的构建。很多团队通过重新打标签或重新指向仓库中的标签,来给候选版本改名,这样被测试过的字节,就是用户下载到的字节。

对于软件包,要把候选版本发布到单独的渠道,这样普通用户就不会意外收到它们。使用 npm 时,npm publish --tag rc 会让默认的 latest 标签保持原样,只有指定 @rc 的人才能拿到候选版本。容器镜像和移动应用构建也有同样的思路,只是名称不同:预发布标签、分阶段推出,或者类似 TestFlight 的测试轨道。

如何为发布候选版本撰写发布说明?

从第一个 RC 就开始写发布说明,并让它与候选版本保持同步。测试人员需要知道改了什么、该检查什么、已知哪里有问题,而且提早起草能找出到最后没人记得的条目。把页面或 GitHub 发布标记为预发布,这样没人会把它误当成正式版,等正式发布时,再把写好的文字移到 GA 发布上。版式和内容见软件发布说明,GitHub 一侧见 GitHub 发布说明。

SaaS 团队需要发布候选版本吗?

持续部署的团队很少需要,因为生产环境的部署本身就是测试,而且由功能开关控制谁能看到变更。当用户自行安装软件、无法通过一次部署回滚时,发布候选版本才有用武之地:库、桌面和移动应用、自托管产品,以及客户端长期存在的 API。对于逐步放出变更的托管产品,对应的做法是分阶段推出,feature flag 发布说明这篇文章从沟通的角度讲了这件事。

FAQ

软件中的 RC 是什么意思? RC 是 release candidate 的缩写,即发布候选版本。它是团队打算作为最终版本发布的构建,除非测试发现了阻塞缺陷。它排在 alpha 和 beta 阶段之后,正式发布之前。

发布候选版本稳定到可以用于生产环境吗? 在预发布环境或有限的生产环境中测试,通常可以,但它带有正式版没有的风险,因为测试可能还没有完成。把它当作仍在试用期的生产级代码来对待。

一次发布应该有多少个发布候选版本? 需要几个就有几个,大多数发布需要一到三个。连续出现很多候选版本,通常意味着冻结宣布得太早,或者测试覆盖让问题发现得太晚。

发布候选版本可以不做任何改动就成为正式版吗? 可以,这正是预期的结果。正式版应当与最后一个候选版本是同一个构建,只是改了名称或重新标记为 GA。


本文的技术内容未经独立审核。如有错误,请告诉我们,我们会更正。

changeloop 相关页面: 开发者文档, 发布说明模板

changeloop
打造闭环 changelog 的团队。用户提出需求,你的团队交付,提出需求的人得知结果。