# 背景
开发:每次发布得在低峰,流程较长,需要研发熬夜通宵支持上线
产品:产品需要支持 abTest 能力,纯代码控制的 abTest 会产生大量的 hardCode
质控:如果出现生产 bug,会造成用户大面积影响
# 目标
灰度应用可配置,灰度区分于生产:先在灰度上线应用,经一定时间稳定后再大面积推送升级
# 方案
- web 端
- 登录分离(登录识别是否是灰度用户,分别加载不同版本代码)
- 页面直接跳转
- 代码分离
- 移动端
- 本地缓存区分
- 客户端
- 本地缓存区分
# 具体实现
- web 端
- nginx 层转发(lua 脚本)
- 移动端 native 端实现
String url = 'produrl'
// 从缓存中读取
Boolean isGray = true;
if (isGray) {
url = 'grayurl'
}
webview.load(url)
1
2
3
4
5
6
7
2
3
4
5
6
7
- 客户端 native 化实现
const isGray = localStorage.getItem('isGray')
let basePath = '/prod/file'
if (isGray) {
basePath = '/gray/file'
}
file.load(basePath)
1
2
3
4
5
6
2
3
4
5
6