OpenSourceCamp

版本发布

姜宁

讲师介绍

  • TODO 添加讲师相关的内容

开源项目版本发布

  • 版本发布的策略

    • 完全关闭道路,维修人员完全投入

    • 多分支并行开发,保证版本的持续维护

  • 开源项目版本的持续小修小补

  • 开发人员的工作时间不好保证,需要并行处理问题

为什么设定软件版本编号

  • 修复了老的版本Bug

  • 添加了新特性

  • 添置的新的配置选项

  • 引入了不兼容的修改

  • 体现特定系列内的版本顺序

  • 表明每个版本中变更的程度和性质

版本号组成

  • 三位数的版本号

    • 主版本号.次版本号.小版本号

    • Singer 5.11.4

  • 版本号 + 限定词

    • Scanley 2.3.0 (RC1)

    • Singer 5.11.4 (Beta)

版本号的语义

  • 小版本的变化为需要保证前后的兼容性

  • 次版本号变化必须保证后向兼容

  • 主版本变更不必考虑兼容性

奇偶数策略

  • 大多应用在次版本号上

    • 偶数表示稳定版

    • 奇数表示不稳定版

    • 适合发布周期较长的项目

    • 也可以通过其他方式进行标注

版本分支

  • 开发分支要保证可以持续合如代码

  • 隔离版本工作与日常开发变动

  • 多分支策略可以保证大家各司其职

  • 分支维护的技巧

    • 稳定版本 Bug fix 策略

    • 分支上游优先的维护关系

稳定版本

  • 处于可以随时发布状态的版本

  • 通过冻结新功能达成稳定版

    • 基于时间的版本

    • 基于特性的版本

版本的负责人

  • 可以决定那些变更可以合入版本

  • 具备理解所有变更的技术能力

  • 具备社群威望和社交技巧

  • 能够掌控有关版本发布的讨论

变更的表决

  • 开发者有权对是否合入变更进行投票

  • 投票必须有正当的(技术)理由

  • 先review在合入 +2 投票

  • 先合入再review -1 投票

版本经理(执行人)

  • 按照发布流程推动版本发布

    • 确定版本发布时间点

    • 维护和执行发布脚本

    • 准备release note

    • 发起和追踪投票

    • 完成发布版本工作

打包

  • 版本发布包含:源代码和二进制便利包

  • 格式 Unix tar.gz; Windows zip

  • 文件包含:

    • README, COPYING 或者 LICNESE

    • Apache Notice 文件

    • CHANGES 或者 NEWS

    • INSTALL

编译和安装

  • 提供文档描述,常规的编译操作

  • C、C++代码

$ ./configure
$ make
# make install
  • Java项目,使用 maven

$ mvn clean install

验证版本

  • 发送邮件邀请相关人员试用投票

  • Apache使用GnuPG对发布件进行数字签名

  • 需要引入发布人的Public key进行验证

  • 二进制哈希识别确保文件没有被篡改

版本发布公告

  • 通过公开的途径宣布版本发布

  • 提供URL下载相关tar文件

  • 确保签名和SHA1校验文件提供

  • 提供版本修改记录(Github也支持自动生成)

  • 感谢开发团队和测试人员以及提bug的贡献者

多版本分支维护

  • 开源项目的生命周期支持

  • 常规维护分支 Bug fix,安全漏洞修补

  • 主线开发版本合入所有的修改

  • 一般不提供超过三个以上分支版本的维护

  • 控制好各个分支的修改提交粒度

规划版本

  • 以志愿者贡献为基础的版本规划,发布时间不好安排

  • 一般通过商议的方式确定特性集

  • 需要平衡开源版本和商用版本发版策略

  • 提高版本发布频率可以降低版本规划矛盾

参考资料

问题

  • 大家可以现场提问

  • 在演讲之后沟通

  • 给我发送邮件