我在使用 LeanStorage 和 LeanEngine。 是一个React应用,支持服务器端渲染的。

在部署的过程中,我先 push 到github, 然后在云引擎界面操作 pull, 然后云引擎会把项目下载下来,然后运行 npm install,然后 npm start

可是这中间有一项工作是 webpack 打包。这项工作我现在是放在 postinstall 里做的。因为在上面的流程里,云引擎没有给我机会做这件事,我也不希望把打包后的文件放在 github 里。所以这是我唯一想到的办法。

这个办法唯一的问题是我需要把所有打包需要的 package 都放在 production dependencies 里, 否则在云引擎里 npm install 的时候就安装不上。

我在想其实云引擎部署的流程距离简单的CI很接近:
1. 添加钩子,当 git 的某一个 branch 被更新时启动部署流程
2. 提供可选择的非 git 方式(ftp, http 等等)上传项目
3. 添加构建环境,在这个环境里可以运行命令,构建项目 (这个一开始不需要太强大,给一个基本的 node 环境就行)
4. 将构建结果部署到服务器

就是在使用的时候开个脑洞,说起来容易做起来难。不知道 LeanCloud 会不会考虑添加持续集成的功能。 :)

这确实是我们最近比较纠结的一个问题,有的用户希望装 devDependencies(比如像你一样希望在服务器端做构建),也有的用户不希望装 devDependencies(因为他的程序在运行时不需要 devDependencies,会增加部署耗时)。

我们目前的行为是只装 dependencies 不装 devDependencies,具体来说我们会在云引擎上为你的应用依次运行 npm install --productionnpm start,所以你暂时可以将构建需要的依赖放在 dependencies 里,然后在 postinstall 或 prepublish(npm install 会触发这两个 hook)里写上你的构建命令。

1 添加钩子,当 git 的某一个 branch 被更新时启动部署流程

这个功能很快就会上线了,暂时你可以用 curl -X POST -H "Content-Type: application/json" -H "X-LC-Id: <your app id>" -H "X-LC-Key: <your master key>,master" "https://leancloud.cn/1.1/functions/_ops/groups/web/webhookToken/reset" 得到一个 webhook token(请不要反复调用这个接口,每次调用都会重置的),然后在 GitHub 上填写 https://api.leancloud.cn/1.1/functions/_ops/groups/web/buildAndDeploy?token=<your webhook token> 作为回调地址(目前不支持设置特定分支,只要收到回调就会部署)。

这个功能还未正式发布,不排除正式发布时相关 API 有调整。

2 提供可选择的非 git 方式(ftp, http 等等)上传项目

你可以用 curl -X POST -H "Content-Type: application/json" -H "X-LC-Id: <your app id>" -H "X-LC-Key: <your master key>,master" -d '{"zipUrl": "http://ac-ktzcvf3a.clouddn.com/7289ce1d9df8e944.zip"}' "https://leancloud.cn/1.1/functions/_ops/groups/web/buildAndDeploy" 来发起一次部署,zipUrl 字段是代码的压缩包(需要你自行上传到我们的文件存储)。

这个是内部 API,不排除以后有调整。

3 添加构建环境,在这个环境里可以运行命令,构建项目 (这个一开始不需要太强大,给一个基本的 node 环境就行)

我们是会运行 npm install 的,install 结束后,npm 会自动触发 postinstall,你可以在 postinstall 里写构建命令,这时是有 Node 环境的,并且你可以使用你的 dependencies 里的包。

4 将构建结果部署到服务器

第二步里的那个 API 会在构建完成后触发一次部署。

请问第二步里,如果是美国服务器怎么办?仍然可以用吗?

域名换成 us.leancloud.cn 就行

好的,谢谢。 我在用 circleci 部署。