正文
后端接受来自前端用户触发的操作,反馈数据或者调用工具链执行相关任务,所有的任务数据流都流经后端,从而能够保证构建数据的完整性。
2. 业务模型
插件化检查方式
组件的发布和集成阶段都需要有准入,但实际上每个组件的准入步骤并不一定完全一致,并且随着业务的需要,准入步骤也会相应的调整。面对这样的需求,将准入步骤插件化则是一个比较灵活方式。
能力
工具链会先行开发准入步骤,这是一个可以接受参数的 fastlane 的 action。完成开发后,我们会在 Hyperloop 后台上线对应的能力。
组件在自己的设置界面可以看到 Hyperloop 中所有已上线的能力,有一些是必选的,则默认就已经选上了,其他非必选的能力,则有该组件配置权限的同学可以根据自己业务需要勾选。
有一些检查,例如 warning 数,是可以设置一个目标值的,在未来的某个时间点达到什么样的目标,之后每一次准入都会由后台动态计算本次需要达到的目标。
App 的打包集成准入则是通过打包模板的方式来配置准入步骤,相较于发版的简单方式,集成打包则需要有多种情况供用户选择。除了和组件一样,可以配置目标值,打包模板还可以灵活设置参数配置方式。
策略
将某个能力勾选之后,组件或者打包模板中就会生成对应的策略,不同于能力的是,策略中保存了组件或打包模板中业务方配置的参数。
步骤
每一次组件发版,每一次集成打包,都会生成一个版本,Hyperloop 后台会根据能力和策略生成本次执行时具体的步骤,和策略类似,不过步骤中参数则是更为具体的值。
随着发版和集成任务被触发,工具链被调用后会请求 Hyperloop 后台,下发本次执行的步骤,工具链拿到后就会按照具体的步骤和参数来执行任务了。
这样插件化的模型设计,大大减少了工具链的开发成本,并且增加了整个准入步骤的灵活性,更加符合业务方自己的需求。
3. 功能实现
组件发版
组件是支撑整个美团 iOS 客户端的基础,前面也提到了,现在有超过300个组件通过我们的这个系统来发布,而在整个开发周期中,又有超过700次的发布需求。而作为整个客户端的发布流程的起点,组件发版又有着尤为重要的作用,所以在整个系统搭建之初,组件发版是我们优先考虑的功能。
在第一阶段,我们实现了基本的组件发布能力,业务方已经可以通过 Hyperloop 来对自己的业务组件进行发版。
但是对于一个全新的发布调度系统,仅仅用于发版是远远不够的,既然我们可以做到数据的汇总分析,那么就可以通过在准入中添加一些特殊的能力,使项目中一些可以优化的指标得以实现,例如 warning 数的分析和限制。所以在完成了基本的发版准入后,我们又增加了一些可选的优化能力。
提到限制,可不仅仅是设置一个数值这么简单,Hyperloop 允许用户设置目标值和目标时间,动态地计算出每一次需要达到的数值,从而通过程序这种强制性的手段,来实现工程上面的优化。
有了准入限制,只能说完成了这个功能的一大部分,数据的的展示有多种多样,既然我们拿到了组件发布时的全部数据,那就让它有一个很好的展示。所以第三阶段,我们又完善了整个组件发布的信息,以及添加了一些功能性的能力,例如 Changelog 的生成,以丰富整个发布过程,让用户能够更清楚地了解到这一次发布的状况。
如果发布失败了,我们会在出错的步骤中展示错误的原因和建议,以及出错的 log,方便大家调查出错原因。
打包集成
组件发布后,就去集成到美团 iOS 客户端的主工程里面,所以完成了发布功能后,我们就开始着手实现打包集成。
作为美团点评最大的 iOS 项目之一,美团 iOS 客户端不管是从业务量级,还是整个打包集成发布的流程,都是非常复杂的,参与 RD 人数也很多。当我们对全公司 iOS 项目分析后发现,如果实现了美团 iOS 客户端的打包集成,那么别的独立 App 也都能够适用。
在这个功能的第一阶段,我们简单的适配了之前的集成流程,为了让整个发版集成流程尽早可以完整的连起来。满足了基本可用的条件后,我们参考组件发布的步调,开始完善整个集成的流程。第一步,就是增加准入限制。
如果说组件发版是整个美团 iOS 客户端搭建的第一步,那么集成就是第二步,也是至关重要的一步。作为集成来讲,准入尤为重要,可以说客户端的各项性能指标是否符合要求,基本上就看集成准入是否能够过滤掉不合格的组件。
所以我们会在基本的集成能力中加入例如包大小检查这样的增强型准入检查,而在集成包构建完成之后,会进行自动化测试,保证本次集成除了没有编译错误,还不会有运行时问题。
当然了,作为二进制集成,我们还需要保证我们的组件间 APIs 调用正确,所以我们还会进行全源码编译,来确保没有调用不一致的问题。
同样,Hyperloop 在集成时所收集的信息,都会展示出来。不同于组件发布,集成后有诸多产物,各位 RD 可能会有下载需求,我们还会把所有的产物都打包上传到美团云上,提供下载链接。