关于作者
携程前端框架团队为携程集团各阶段业务线提供优秀的 Web 解决方案,包括 PC、H5、小程序等。产品包括各类前端/Node 应用框架、研发工作台、前端中间件、静态资源发布系统等。目前主要关注的领域包括:新一代研发模式探索、Rust 构建工具链接升级、应用框架开发、在线文档系统开发、低代码平台搭建、老少皆宜无障碍探索等。
1. 背景
目前携程小程序已有30多条业务线并行运行,数百名开发者参与,每两周进行一次常规发布。如此大规模的小程序,如此快的业务迭代速度,对我们的技术提出了更高的要求。
在携程小程序开发过程中,如何准确、快速地将小程序交付给测试人员是一个繁琐的过程。按照以往的实践,开发人员将代码提交到发布分支后,需要发布到公司的 MCD(携程内部发布平台),同时有十几条业务线在工作,排队打包,而打包完成后,还需要依靠 PMO 的发布才能获得体验代码进行测试。理想的模式是,开发人员只需要提交代码,而不必关心项目的编译、打包、发布等流程。
跨团队协作,如何降低耦合,避免相互影响;几十条业务线共同维护一个小程序,而小程序要整体发布,如何协调发布流程,让其有序进行,将是我们讨论的重点。本文将从仓库管理、持续集成、持续交付等方面进行详细介绍。
2. 协作过程
携程小程序采用模块化理念,按照业务线进行代码拆分隔离,采用多BU(业务单元)协作模式。为了避免多人协作时出现版本切换、线上测试隔离等问题,我们将一个完整的项目按照业务类别分成多个业务仓库,比如基础业务、酒店业务、机票业务、火车票业务等,彼此之间没有依赖关系;业务仓库的代码通过发布仓库进行合并、打包、上传。此仓库中的代码为预发布版本,如图1所示:
图1 协同架构图
2.1 仓库管理
每个业务模块都是一个独立的Git仓库(即git仓库),互相之间不影响。要实现协作,各个业务仓库必须有统一的规范。仓库的规格如下:
值得注意的是,在模块化过程中,业务模块已经被隔离,各个业务仓库无法独立运行。为了协调各个仓库的路由配置,我们规定在每个模块的根目录下,添加各自的app.json配置来配置业务模块的路由,然后在打包工具时将各个模块的路由合并起来。对应关系如下:
图2-1 业务仓库与小程序完整目录对比
在开发阶段,我们需要使用我们提供的脚手架工具完成项目初始化、代码更新、远程打包等操作,常用的命令如下:
执行一个简单的命令-init,就可以从各个业务仓库拉取代码,并合并成一个完整的小程序,以便在微信IDE中开发。
除了仓库规范之外,每个业务仓库还需要配置跨仓库提交代码时触发仓库的发布(-auto.git)。
2.2 持续集成
为了减少开发成本和人工操作,我们基于微信小程序官方提供的-ci工具构建了自动化上传测试流程。通过在业务仓库中进行配置,当业务仓库的发布分支()发生推送事件时,会触发发布仓库(-auto.git)执行我们在-ci.yml文件中设置的脚本。主要内容如下:
图2-2 -ci.yml核心配置
从上图可以看出,我们主要依赖git命令以及git提供的脚手架工具,通过git --将第三方库(各业务仓库)中指定分支提交的最新代码合并到当前仓库(发布仓库)的指定位置,然后通过脚手架工具执行预定义的脚本文件,具体流程如下:
图2-3 操作流程
1)获取服务器配置信息,主要包括Size和RC()数据:
2)从各个业务仓库拉取最新的代码,并合并形成完整的小程序代码;
3)通过检查代码的合法性,最大程度地避免基本的语法错误;
4)使用微信提供的-ci工具,自动编译并删除无用代码,减小大小;
5)大小检查:使用微信提供的-ci方法获取所有分包的大小,并测试二维码,通过计算检查当前业务仓库的代码提交是否会导致大小超限,如果超限,则发布失败。
6)RC 发布权限检查:服务器返回的 RC 值(true/)决定我们是否要将其最新代码合并到发布仓库的分支中,是否将最新代码压缩成 zip 包作为预发布版本上传到发布仓库的分支中。最终的发布仓库(-auto.git)及分支目录结构如下图所示:
图2-4 -auto项目目录
7)数据更新:若RC为真,且代码上传成功,我们会同步更新业务仓库,分包大小等信息到服务器,以便其他业务仓库可以拉取该仓库最新的代码;
8)构建结果通知:无论成功失败,构建结果都会发送给相关群和触发人,若失败会返回详细错误信息,方便排查问题,若成功会返回测试二维码,如下图所示:
(1)失败
(2)成功
图 2-5 构建结果通知
以上任何一个步骤失败都会导致失败。通过以上过程,确保提交到发布仓库的代码是正确的。
2.3 持续交付
目前携程微信小程序的发布已经统一接入公司MCD发布平台,预先写好的脚本在MCD平台上配置好,当发布节点临近时,PMO只需要到MCD平台进行集成发布即可。此时MCD会自动运行我们预先设置的脚本,拉取发布仓库分支上的zip包,整理好,生成试用版二维码,由PMO发送给相关人员进行集成测试。
图2-6 携程MCD发布平台
测试通过后,PMO会手动将代码提交到微信后台审核,至此,一个完整的常规发布流程就完成了。
结论
总结一下,通过仓库管理,每条业务线划分独立的git仓库,保证业务独立发展,互相不影响;通过自动化的持续集成方案,结合公司的MCD发布平台进行持续交付,大大简化一线开发人员的开发成本,只需要提交代码,打包、测试、上传、预览、通知等操作全部由发布仓库自动化完成,避免了人工操作的不稳定、繁琐,保证了业务的敏捷发展和协同合作的效率。
本文只介绍常规业务线协同开发流程,其实携程微信小程序早已引入Taro的概念,并利用Taro技术栈设计了一套独特的业务线封装方式,目前在微信小程序中运行良好,我们正在稳步推广到其他类型小程序(百度、今日头条、支付宝等)。