離線包管理平臺主要負責對須要接入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