徐维飞
跨平台应用开发在当前软件开发中占据越来越重要的作用,单一系统下开发软件代码,发布时分别编译部署到多系统平台;尤其在移动开发领域,跨平台开发成为很多企业和开发者的首选。一直以来,跨平台软件开发面临着多平台自动编译、分发、部署问题,本文结合实际跨平台软件开发经验,设计并实现了一种通用多平台软件自动化编译及监控系统,旨在解决跨平台软件开发中遇到的软件编译、部署的效率问题,并提供实时Web服务来监控软件编译、部署状态。
(一)总体设计
整个系统架构根据核心功能不同的思路采取模块化设计,划分为各自拥有独立服务功能的模块:中央服、编译服、账户及权限管理服、邮件服、FTP服;各服务功能模块之间相互独立,互不干扰,对其他功能模块提供独立服务接口,具体架构如图1所示。
(二)编译服模块设计
编译服在整个系统中起到最核心的作用,主要负责处理软件自动化编译任务。
软件开发中通常使用特定的版本控制系统来进行软件本版开发的管理,比如常用的版本控制工具有Git、SVN、Mecurial等,可以根据项目需求来选择,我们这里选用开源的分布式版本控制系统工具Git来作为版本控制工具。在编译服中根据服务器空间及运行配置,预先初始化多个目标软件Git源码仓库,我们这里称之为编译分支,每个编译分支完全独立,所有分支全部指向同一个Git源码服务器,这样能够保证每个编译分支获取的软件源码等资源是相同的,我们可以自由地在其中任何一个编译分支执行编译任务,最终构建的软件输出也是一致的,具体如图2所示。
基于以上已经初始化的多个独立编译分支的设计前提,Web Server在启动时会根据当前服务器编译分支数量初始化相同数量的独立系统进程,每个进程分别绑定一个指定编译分支,每个进程负责各自编译分支的编译任务,进程间完全独立,最大化支持并行编译任务,尤其在当前普遍拥有多核CPU的服务器上,对编译效率的提升是毋庸置疑的。如果用户需要启动一个编译任务,首先通过浏览器访问编译服主页,通过提供指定账户登陆编译服,编译服接收到账户信息后,使用提供的标准Rest API接口去账户认证服校验账户及访问权限,如果校验失败,则拒绝用户继续访问编译服;检验通过则返回当前编译服中所有编译分支状态信息,编译分支是否可用。通过网页,用户选择可用编译分支,启动编译任务;相应的编译进程收到编译任务指令后,进入对应源码仓库,连接源码服务器并拉取指定版本节点的软件源码,启动本地软件编译指令,正式开始软件编译;编译执行等待中,Web Server会实时返回用户当前编译分支运行状态信息;编译结束后,编译输出的平台可执行包体文件上传到FTP服务器存储,然后通过邮件服务器发送邮件给相关人员,邮件内容包括本次编译任务的所有的详细编译状态信息、编译结果、输出文件链接等。
可根据实际项目需求,在编译服上部署任意Windows、Mac或Linux等系统平台来运行编译服务,各编译服之间完全独立分布,可弹性搭建任意数量,并指定任意编译服编译任意目标输出系统平台(Android、iOS、Windows、Mac、Linux等)软件版本,各编译服并行编译,互不干扰,灵活地实现跨平台并行编译。
(三)账户权限管理模块设计
对编译服的任何访问或操作请求,需要提供专有账户并验证通过后才能访问,这是对软件工程及源码安全的最基本保護。账户权限管理模块作为另一个核心模块,主要提供账户创建、验证、查询、权限管理功能,供编译服或其他任何需要安全验证服务的系统验证请求。
同样地,账户权限管理模块采用以Python+Tornado为架构基础搭建的Web Server,对外提供浏览器页面访问及Rest API访问模式。浏览器访问模式主要提供管理员、普通用户访问。管理员拥有超级账户权限,可以创建、修改、删除或访问任何普通账户的权限;普通账户访问,只能访问或修改当前账户自己的状态信息,因此系统对不同权限的账户提差异化功能。
整个管理模块划包括以下子模块:账户模块、项目管理模块、权限模块及展示模块。账户模块主要负责管理管理员或个人对账户的增删修改操作请求任务,项目管理模块主要负责管理不同项目,不同账户对项目的操作权限是不同的;权限模块主要提供绑定指定账户对不同项目之间访问权限关系,比如用户名为”Zhang San”的账户对项目A具有普通操作权限、对项目B具有浏览权限、对项目C具有管理员权限,当然,这些权限完全可以自定义;展示模块提供管理员及普通用户通过浏览器访问,获取相关账户信息进行展示作用。以上所有的账户信息、项目信息及相关权限信息全部保存于数据库(MySQL等常用数据库)中进行持久化,可随时访问及查看。基于安全考虑,对管理员账户或普通账户操作的关键信息,系统将通过邮件服务器发送邮件给相关人员,方便及时查看及处理。
此系统平台是笔者在长期的跨平台游戏App应用软件开发中持续研发集成的系统框架,主要用于面向Android、iOS、Windows平台软件编译部署需求的,全自动化实现了一键软件集成、编译、部署等功能,在实际项目开发应用中取得了良好的效果。作为通用框架,同样适用于其他跨平台App应用软件开发,只需少量项目本地编译环境、编译命令等适配工作即可使用。
作者单位:上海梦之国网络科技有限公司