1. 版本规则

版本规则使用语义化版本规则,英文是 semver version,语义化版本规范参考:https://semver.org/lang/zh-CN/

语义化版本控制规范(SemVer)的简单表述为:

标准的版本号采用 X.Y.Z 的格式,其中 X、Y 和 Z 为非负的整数,且禁止在数字前方补零。X 是主版本号、Y 是次版本号、而 Z 为修订号。 X.Y.Z 的格式简单说明:

  • 主版本号 X 在不向下兼容的更新时候递增,标志着软件的重大更新。
  • 次版本号 Y 在向下兼容的情况下添加新的特性,弃用的 API 可以备注但是需要继续保持支持。
  • 修订版本号 Z 为修复缺陷后的版本号,不涉及破坏性的更新和特性变化。

语义化的版本号可以让发布管理变得更加简单和规范。

2. 封包

封包又叫代码冻结,指的是一个软件版本开发完成,并修复完大部分已知的缺陷。代码冻结后,不应该再加入新的特性,但是依然可以进行 bug 修复。

封包操作流程:

  1. 通过 Master 分支拉取 release 分支,分支的命名按照 release_[版本号] 的规则进行,例如:release_1.0。
  2. 通过最新的 commit it 创建一个 tag,名称为当前的版本号。
  3. 触发流水线构建发布的制品。
  4. 准备上线清单,并将上线清单在 UAT 演练一遍
  5. 清理不再使用的分支

完成封包后,在 UAT 进行回归和进行 bug bash(一种全体探索性测试实践),完成测试后,按照计划进行上线。

3. 上线

上线使用 Jenkins 或者其他 CD 平台,避免手工操作,发布时间需要在迭代计划中指定的时间。 上线工作参与人员:

  • Deveops 人员
  • 每一个部署单元开发接口人 上线时间推荐在晚上 10 - 12 点之间,上线期间通过视频会议进行直播,让必要的团队成员都能参与。

上线检查清单

  1. 上线前
    • 确认软件制品已经准备完成,并完成回归测试
    • 提前发送业务中断信息,包括邮件和悬挂系统通知
    • 准备部署脚本 (例如 shell、ansible)和线上配置文件(例如Nginx配置)
    • 制定上线计划,上线计划应该清晰地表明执行步骤和负责人
    • 在低版本演练上线计划(UAT环境)
    • 在低版本演练灾备恢复
    • 需要准备好回退计划
    • 有条件的,进行安全测试
  2. 上线
    • 执行上线动作至少需要两人pair操作(大量误操作造成事故的案例),可以创建线上会议直播上线操作
    • 停服后需要监控数据流量,确保流量为 0 后再进行数据、配置和线上软件包的备份
    • 上线失败后使用回退计划
    • 尽量不对线上环境进行手动配置,如果无法实现自动化部署,应添加到上线计划中
  3. 上线完成后
    • 使用专用的 Health check 接口检查系统健康状态
    • 核对线上系统的版本号是否和预期一致
    • 检查服务器负载是否在健康范围内
    • 其他授权下的线上测试
    • 检查日志平台是否有日志到达
    • 检查日志中是否有错误信息
    • 发送业务恢复邮件和系统通知
    • 上线完成后,需要当前线上环境的信息更新文档
    • 记录新的IP地址、服务器配置信息等
    • 归档最新线上的版本号、软件包、配置文件
    • 归档本次上线计划
Last Updated:
Contributors: lin