小程序-持续集成
很多成熟的公司的软件开发流程中为了规范化和保证产品质量,都有 持续集成
这个环节。在小程序这一侧,由于依赖微信开发者平台,和以往的web开发有一定的区别,本节主要介绍如何自动化的做小程序的预览,发布,提审,以实现规范化的开发,上线。
规范化的开发流程
小程序在提审之前,开发者可以通过二维码测试,预览。在这种情况下,如果没有规范化的流程,开发测试流程就会比较混乱,也会存在一些问题(例如不同同学的功能测试,手动提供二维码给测试同学,二维码失效),所以在开发时笔者建议采用如下开发流程(未接入持续集成):
- 不同的开发同学根据开发任务拉分支在本地开发,自测
- 开发完成后提交到远端,经过
review
或者代码审核
之后,合并到develop分支并上传体验包,作为可提测的版本 - 告知测试同学可以测试,测试同学可以通过小程序开发助手打开体验版本来测试
- 测试完成之后,合并
develop
代码至master
分支,并提审上线,上线完成后删除无用分支,打上版本tag
如何做小程序的持续集成
准备工作
- 操作系统为
windows
或者macOS
的服务器 - 服务端安装小程序开发者工具 下载地址
- 准备一个通用打包构建角色微信号,并将改微信号添加到所有小程序的开发者中,提供开发者权限
开发小程序的集成脚本(可以使用各种语言shell
, js
, python
…)
开发者工具根据提供了 cli两种方式供外部调用来实现登录,预览,上传,下面介绍下 http
调用,cli
方式也很类似。开发者工具打开之后,本地会启动一个 http
服务,端口号在用户目录的 .ide
文件中,并且提供以下几个接口供开发者调用:
/open
打开指定路径项目/login
登录/preview
预览指定项目/upload
上传指定项目/test
提交项目
根据提供的这些能力,我们可以编写出发布脚本(以下是简单示例):
function getPort () {
const home = os.homedir()
const portPath = process.platform === 'win32'
? path.join(home, '/AppData/Local/微信web开发者工具/User Data/Default/.ide')
: path.join(home, '/Library/Application Support/微信web开发者工具/Default/.ide')
if (!fs.existsSync(portPath)) {
this.log.error('error')
} else {
const port = fs.readFileSync(portPath, { encoding: 'utf8' })
return +port
}
}
function release() {
http.get(`http://127.0.0.1:${port}/upload?projectpath=${encodeURIComponent(path)}&version=${version}&desc=${encodeURIComponent(message)}`, res => {
const { statusCode } = res
if (statusCode === 200) {
// success
} else {
// fail
}
})
}
集成
不同公司使用的工具有一些区别,下面简单介绍一下常见的两种(一般是运维同学来执行,笔者不是特别熟悉,所以只是简单介绍):
gitlab
安装gitlab runner,搭配gitlab提供的CI编写CI文件,这份文件会包含构建命令,将上一步编写的脚本集成进执行命令即可
Jenkis
安装Jenkis后新建构建任务,配置任务(指定代码仓库,分支,构建参数),指明构建方式(可以选择shell,然后编写shell来执行你的脚本)
做完集成后,就可以优化上面介绍的开发流程,将打测试包
和发布
的权利交给测试同学,开发者安心的开发啦。
总结
以上是笔者实践过的对小程序持续集成的整个流程,不管公司有没有接入持续集成,上面的方式都可以方便开发者自动化的预览,发布,也可以集成到工程化流程中,使用起来会更加方便。具体的实现可以参考pandora-cli。