环境准备
需要一台Centos服务器,然后安装如下软件:nodejs,mysql
- 从EPEL库安装Node.js
sudo yum install epel-release
sudo yum install nodejs
安装code-push-server
下载代码,地址https://github.com/lisong/code-push-server
# 本地安装
git clone https://github.com/lisong/code-push-server.git
cd code-push-server
npm install
更新配置并初始化数据库
# 修改配置文件
# 修改 db 数据库连接信息
# 修改 qiniu 为七牛相关信息
# 修改 jwt 为相关信息
# 修改 common 里面的 storageType 和 dataDir 和 codePushWebUrl ( 因为用了 code-push-web
vi code-push-server/config/config.js
**主要是修改数据库配置和downloadUrl**
# 初始化数据库 会在数据库中创建一个 database 名字是 codepush
chmod +x ./bin/db
./bin/db init --dbhost localhost --dbuser root --dbpassword password
./bin/db init --dbhost localhost --dbuser root --dbpassword 123456
若出现以下错误
/usr/bin/env: ‘node\r’: No such file or directory
使用vim打开要运行的脚本文件
:set ff=unix
:wq!
启动服务
注意,先创建目录(/Users/tablee/workspaces/storage),否则启动报错。
启动完成后,打开 yourIp:3000 进行登录,默认密码为 admin,123456
# 浏览器中打开 http://yourIp:3000
cd code-push-server
mkdir -p /Users/tablee/workspaces/storage #创建工作目录
chmod +x ./bin/www
./bin/www
在浏览其中输入:http://192.168.102.253:3000/ 能加载到CodePushServer登录界面即表示启动成功。
点击登录,输入用户名:admin和密码:123456点击登录,然后点击获取token:
登录
code-push login http://192.168.102.253:3000
会自动打开浏览器登录,获取token,把获取到的token粘贴过来, 回车
code-push-cli使用
需要先安装 code-push-cli,参照上一篇把代码release到服务器上
npm i -g code-push-cli
# 登录
code-push login http://yourIp:3000/
# 登出
code-push logout
其他命令如下:
- code-push login 登陆
- code-push logout 注销
- code-push access-key ls 列出登陆的token
- code-push access-key rm <accessKye> 删除某个 key值
- code-push app add <appName>
- code-push app <add> <remove> <rename> <list> <transfer>
添加一个应用
MyApp //应用名称
code-push app add MyApp android cordova/react-native
代码发布
#在cordova工程里提交update到远程服务的MyApp下
code-push release-cordova MyApp android
#查看
code-push deployment list MyApp
CordovaApp修改
主要是修改config.xml文件,更新DeploymentKey和CodePushServerUrl
<platform name="android">
<preference name="CodePushDeploymentKey" value="aQJIThQ73BHd8iXS4WIp3X2l7vmx4ksvOXqog" />
<preference name="CodePushServerUrl" value="http://192.168.102.253:3000" />
</platform>
注意,确保手机与服务器在同一网络,否则请求失败。
docker容器部署
#FROM node:alpine
#FROM node:8.11.4-alpine
FROM node:10.15.0-alpine
COPY . /opt/codepush-server
WORKDIR /opt/codepush-server
RUN chmod +x /opt/codepush-server/bin/www
RUN mkdir -p /Users/tablee/workspaces/storage
RUN npm install
ENV NODE_ENV production
ENV PORT 3000
ENV CONFIG_FILE /opt/codepush-server/config/config.js
ENV COMMON_DATA_DIR /opt/codepush-server/data
ENV LOCAL_STORAGE_DIR /opt/codepush-server/storage
VOLUME [ "/tmp", "/opt/codepush-server/data", "/opt/codepush-server/storage" ]
EXPOSE 3000
RUN ls
CMD [ "node", "./bin/www" ]
code-push-web
此项目已不再维护
把代码push到code-push-server却看不到相关数据,需要用命令查看,很麻烦,这里可以通过这个web工程查看相关数据,就是读取了code-push-server的数据库。
code-push-web 是 code-push-server web客户端,界面化操作,比较简单。
可装可不装,如果不用,请把 code-push-server 配置文件中的 codePushWebUrl 这项注释(默认注释)
安装
# clone
git clone git@github.com:lisong/code-push-web.git
cd code-push-web
npm install
配置
进入到code-push-web目录
vi src/config.js
# 修改 common 中的 URL 和 devURL
export const common = {
api: {
URL: `http://yourIp:3000`, //production code-push-server address
devURL: `http://yourIp:3000` //development code-push-server address
}
};
启动
npm run build --release
cd ./build
npm install
# 启动服务
node ./server.js
打开 http://yourIp:3001 登录 使用之前在 code-push-server 配置的账号即可
app升级注意事项
app升级一般是更新assert/www目录,若需要添加别的目录?若需要更新插件?
几点注意事项如下:
-
config.xml中 widget id必须是当前package(android开发目录package),否则读取不到xml中的各种参数。如图:
-
对于默认不是assert/www,路径的情况,需要修改源码调整路径。
-
cdvasset.manifest此文件需要和www一起,否则无法使用。如图:
- APP版本号需要和cordova保持一致位数,比如Cordova版本1.2.6,Android版本1.0.0.9;则需要调整Android版本至三位(1.2.6).
-
如果出现ExpressPlugin.getuserworkid not a function。这是因为js不识别函数。需要修改cordova_plugins.js,如下:
附常用操作
- Cordova创建一个工程
cordova create hello com.example.hello HelloWorld - 添加平台
cd hello
cordova platform add ios
cordova platform add android - 移除平台
cordova platform rm android - 创建自定义插件
plugman create --name ToastDemo --plugin_id cordova-plugin-toastdemo --plugin_version 1.0.0
4.1 插件更新到平台 【这里只会在插件里生成Android java代码】
plugman platform add --platform_name android
plugman platform add --platform_name ios
4.2 添加插件 【这一步才会将插件生成到Android和ios下】
cordova plugin add cordova-plugin-device - 删除插件
cordova plugin rm cordova-plugin-device - 更新web
cordova prepare
code-push常用命令
安装: npm install -g code-push-cli
注册账号: code-push register
登陆: code-push login
注销: code-push logout
添加项目: code-push app add [app名称]
删除项目: code-push app remove [app名称]
列出账号下的所有项目: code-push app list
显示登陆的token: code-push access-key ls
删除某个access-key: code-push access-key rm <accessKey>
添加协作人员:code-push collaborator add <appName> next@126.com
部署一个环境: code-push deployment add <appName> <deploymentName>
删除部署: code-push deployment rm <appName>
列出应用的部署: code-push deployment ls <appName>
查询部署环境的key: code-push deployment ls <appName> -k
查看部署的历史版本信息: code-push deployment history <appName> <deploymentNmae>
重命名一个部署: code-push deployment rename <appName> <currentDeploymentName> <newDeploymentName>
// 给app在热更新服务器上创建应用
code-push app add <appName> <os> <platform>
例: code-push app add <appName> android cordova
// 删除应用
code-push app rm <appName>
// 查看热更新服务器上有哪些应用
code-push app list
// 查看部署状态
code-push deployment ls <appName>
// 查看部署状态及key值
code-push deployment ls <appName> -k
// 清空部署记录
code-push deployment clear <appName> <deploymentName>
例: 清空Staging状态的部署记录
code-push deployment clear <appName> Staging
// 删除自定义的部署状态
code-push deployment rm <appName> <deploymentName>
//发布更新
Usage: code-push release-cordova <appName> <platform> [options]
例如:code-push release-cordova storeSaas-android android -d Production
Options:
--deploymentName, -d 指定部署的类型, 默认"Staging", 可以选择"Production"
--description, --des 添加描述
--disabled, -x 指定是否应立即下载此版本
--mandatory, -m 指定此版本是否为强制更新版本
--targetBinaryVersion, -t 指定需要更新的版本号, 如果省略, 则用 config.xml 里的版本号 (例如 1.1.0, ~1.2.3)
例1: 发布android应用更新
code-push release-cordova <appName> android --des "描述"
例2: 部署android应用生产环境的热更新
code-push release-cordova <appName> android -d "Production" --des "描述"
例3: 部署ios应用的强制更新
code-push release-cordova <appName> ios -m --des "描述"
例4: 版本号>=1.2.3和<1.3.0的android应用更新
code-push release-cordova <appName> android --des "描述" -t ~1.2.3
参考文档: