小程序-持续集成

很多成熟的公司的软件开发流程中为了规范化和保证产品质量,都有 持续集成 这个环节。在小程序这一侧,由于依赖微信开发者平台,和以往的web开发有一定的区别,本节主要介绍如何自动化的做小程序的预览,发布,提审,以实现规范化的开发,上线。

规范化的开发流程

小程序在提审之前,开发者可以通过二维码测试,预览。在这种情况下,如果没有规范化的流程,开发测试流程就会比较混乱,也会存在一些问题(例如不同同学的功能测试,手动提供二维码给测试同学,二维码失效),所以在开发时笔者建议采用如下开发流程(未接入持续集成):

  1. 不同的开发同学根据开发任务拉分支在本地开发,自测
  2. 开发完成后提交到远端,经过 review 或者 代码审核 之后,合并到develop分支并上传体验包,作为可提测的版本
  3. 告知测试同学可以测试,测试同学可以通过小程序开发助手打开体验版本来测试
  4. 测试完成之后,合并 develop 代码至 master 分支,并提审上线,上线完成后删除无用分支,打上版本tag

如何做小程序的持续集成

准备工作

  1. 操作系统为 windows 或者 macOS 的服务器
  2. 服务端安装小程序开发者工具 下载地址
  3. 准备一个通用打包构建角色微信号,并将改微信号添加到所有小程序的开发者中,提供开发者权限

开发小程序的集成脚本(可以使用各种语言shell, js, python…)

开发者工具根据提供了 cli两种方式供外部调用来实现登录,预览,上传,下面介绍下 http 调用,cli 方式也很类似。开发者工具打开之后,本地会启动一个 http 服务,端口号在用户目录的 .ide 文件中,并且提供以下几个接口供开发者调用:

  • /open 打开指定路径项目
  • /login 登录
  • /preview 预览指定项目
  • /upload 上传指定项目
  • /test 提交项目

根据提供的这些能力,我们可以编写出发布脚本(以下是简单示例):

  1. function getPort () {
  2. const home = os.homedir()
  3. const portPath = process.platform === 'win32'
  4. ? path.join(home, '/AppData/Local/微信web开发者工具/User Data/Default/.ide')
  5. : path.join(home, '/Library/Application Support/微信web开发者工具/Default/.ide')
  6. if (!fs.existsSync(portPath)) {
  7. this.log.error('error')
  8. } else {
  9. const port = fs.readFileSync(portPath, { encoding: 'utf8' })
  10. return +port
  11. }
  12. }
  13. function release() {
  14. http.get(`http://127.0.0.1:${port}/upload?projectpath=${encodeURIComponent(path)}&version=${version}&desc=${encodeURIComponent(message)}`, res => {
  15. const { statusCode } = res
  16. if (statusCode === 200) {
  17. // success
  18. } else {
  19. // fail
  20. }
  21. })
  22. }

集成

不同公司使用的工具有一些区别,下面简单介绍一下常见的两种(一般是运维同学来执行,笔者不是特别熟悉,所以只是简单介绍):

  • gitlab

    安装gitlab runner,搭配gitlab提供的CI编写CI文件,这份文件会包含构建命令,将上一步编写的脚本集成进执行命令即可

  • Jenkis

    安装Jenkis后新建构建任务,配置任务(指定代码仓库,分支,构建参数),指明构建方式(可以选择shell,然后编写shell来执行你的脚本)

做完集成后,就可以优化上面介绍的开发流程,将打测试包发布的权利交给测试同学,开发者安心的开发啦。

总结

以上是笔者实践过的对小程序持续集成的整个流程,不管公司有没有接入持续集成,上面的方式都可以方便开发者自动化的预览,发布,也可以集成到工程化流程中,使用起来会更加方便。具体的实现可以参考pandora-cli