离线包管理平台主要负责对须要接入Hybrid平台的应用进行管理,经过这个平台能够实现对应用的静态资源进行构建、发布、生成离线包,版本控制等,核心场景以下:前端
应用管理对接入平台的应用进行统一的维护,包括以下功能:java
构建过程与目前在Jenkins的Node服务发布流程相似,这个过程也能够考虑在Jenkins实现,过程以下:mysql
回滚暂时没有作,能够考虑两个方案:git
版本检查服务提供给APP端调用,针对APP端的当前版本,提供合适的离线包下载选择,包括升级和回滚,同时也能够经过该接口检测当前用户的版本分布状况,清除过时的版本。sql
APP端发起版本检查状况,附带当前的版本做为参数,从更目录下的version.json文件获取。json
请求格式:服务器
http:
//10.0.1.51:7102/version/check?v=[version]&app=[app_version]
|
示例:架构
http:
//10.0.1.51:7102/version/check?v=0.2&app=5.6
|
返回内容:app
{
"code"
: 0,
"data"
: {
"version"
:
"0.4"
,
"pkg"
:
"0.2_0.4.zip"
,
"hash"
:
"0ce3580a8c1b35bedad056d7d5f5ca1f"
},
"message"
:
""
}
|
异常信息:eclipse
{
code: 1,
message:
'异常信息'
}
|
说明:
经过离线包检查接口,返回离线包的下载连接以及离线包的md5结果,app经过这个连接下载离线包,对离线包进行完整性校验,若是无问题,则覆盖到本地。
对于须要删除的文件,版本检查接口返回须要删除的文件列表,app端删除。
经过对版本检查接口的监控,了解当前用户的版本分布,对长时间没有请求的版本作清除处理,避免生成无用的离线包,占用磁盘空间。
离线包的大小须要作监控,建议不用大批量的修改后在发布,若是离线包过大,离线包下载须要占大量的带宽。
app发版后,若是用户没有升级,有可能有离线包和APP版本不兼容的问题,针对这个问题解决思路:
根目录
cp
...
lib
version.json
说明:
一、按模块划分目录
二、version.json文件是当前的版本信息,内容:
{
version:0.2
}
APP端发起版本检查状况,附带当前的版本做为参数,从更目录下的version.json文件获取。
请求格式:
http://10.0.3.67:7100/version/check/[version]
示例:
http://10.0.3.67:7100/version/check/0.2
返回内容:
0.2_0.3
这个是升级包的包名,拿到包名后,访问cdn路径,下载对应的升级包,覆盖本地目录。
若是返回的内容是当前的版本号,则不须要更新。
请求格式:
http://10.0.3.67:7100/version/download/[包名]/
示例:
http://10.0.3.67:7100/version/download/0.1_0.2/
包名由版本检查接口返回,后续离线包会推送到CDN,经过CDN的URL下载,这个下载连接供测试使用。
从静态资源服务器加载新的离线包,覆盖到本地
注意:跨版本升级,须要提供各个版本升级须要的离线包。
提供hybrid的静态资源管理UI
管理离线包的版本
提供版本校验接口
离线包构建,发布管理,回滚
性能监控
错误日志收集
主版本文件设计
package.json
{
version:'main',
modules:{
"cp":"abcd",
"aa":"cdef"
}
}
模块的版本设计
package.json
{
version:'',
dependens:{
"a.js":'aaa',
"c/b.js":'bbb'
}
}
优先比对主版本号,若是主版本号未变,不更新
主版本号更新,返回静态资源包的url,编码规则:pkg_v1_v2
构建过程生成包
检查模块,若是模块有更新,获取改版的资源,打包,包名的命名规则,pkg_from_to