APP下载

持续集成在移动开发中的应用

2019-07-24蔡国华魏丽丽韩小博

中国传媒科技 2019年6期
关键词:代码部署工具

文/蔡国华 魏丽丽 韩小博

引言

移动互联网发展方兴未艾,作为移动互联网入口的移动应用也成为各个互联网企业竞争激烈的必争之地。这就对移动应用的迭代开发、测试、发布等一系列流程提出了更高的要求,在满足基本功能性的前提下,还要求在安全可靠性、渠道并发性、信息时效性等方面都能够紧跟市场变化。中国搜索移动应用类产品的开发采用敏捷开发的模式,在多版本迭代开发过程中,需要频繁的进行代码集成、编译、测试检查、打包、发布部署等活动,如何将开发人员从频繁的手工劳动中解放出来,降低人工操作带来的失误,加快迭代速度,提高发布质量就成为亟待解决的问题。经过调研选型和实践,中国搜索基于jenkins工具平台,研发设计了一套移动应用自动化持续集成发布解决方案,该方案规范优化了众多环节,集成了多种异构工具及环境,实现了从代码编译到发布的自动化。

1.持续集成

1.1 什么是持续集成

持续集成是一种软件开发实践,是开发团队基于某种或者某些变化对系统进行的经常性的构建活动,比如持续检查、持续编译、持续验证、持续部署、持续基础设施、持续报告等。

1.2 为什么需要持续集成

通过持续集成,可以:

(1)解放劳动力,减少手工操作的失误率,通过持续集成,可以将编译、审查、打包、部署等高频度的重复性手工操作通过工具自动化。

(2)更早的发现问题,通过持续对代码进行集成,可以更早的获取变更,更早进入测试,更早的发现问题,降低解决问题的成本。

(3)增强项目的可见性,持续集成使得软件开发过程更加透明,持续集成系统可以实时提供构建状态和品质。

(4)更快的交付成果,持续集成缩短了编译、集成、测试、发布、部署各个环节的时间,使得交付更快捷。

(5)更高的产品质量,可将代码检查等集成到工具中,通过持续集成对每次提交的代码进行检查。

图1 持续集成典型场景

1.3 持续集成构建系统的组成要素

一个完整的持续集成构建系统应该包括:

(1)代码配置管理工具及恰当的版本控制策略,通过代码配置管理工具保证代码的可维护性和可追溯性,本方案使用subversion作为版本库。

(2)定义编排好的构建集成流程设计,包括编译、测试、分发、部署等。

(3)持续集成服务平台,实现重复工作的自动化执行,可持续实施预先定义编排的构建流程设计。本方案使用Jenkins作为持续集成服务平台。

1.4 持续集成工具平台的选择

Jenkins作为一款开源软件,是基于java开发的持续集成工具,用于监控持续重复的工作,内置功能强大,能完成常见的构建任务。Jenkins有着丰富的插件库,可以根据业务需求定制开发构建、测试、部署或其他自定义逻辑任务,也可以进行静态检查,在业界已得到广泛认可和使用。

2.自动化集成发布方案设计和实施

2.1 移动应用的开发模式

图2 持续集成流程框架

中国搜索移动产品应用采用敏捷开发的模式,已经形成了一套标准的流程,将开发工作流程分为以下阶段:编码->构建->集成->测试->交付->发布,通过借助工具平台采用自动化的方式在不同的开发阶段实现持续集成、持续发布、持续部署。

持续集成:在开发过程中,开发人员频繁的将工作副本合并到开发主干,每一次合并都是一次集成过程,通过持续集成可及时发现代码错误,避免偏离开发主线,实现产品高质量的快速迭代.

持续交付:通过持续交付,可实现频繁的将新版本交付给测试团队以供测试评审,测试评审通过,代码即可进入发布阶段。

持续发布:一旦通过测试评审,通过持续部署可以自动部署到线上生产环境,达到随时随地可发布应用产品。

2.2 集成系统整体架构

针对中国搜索移动应用的开发模式和实际需求,持续集成平台整合了jira流程管理平台与jenkins自动化平台。其中jira平台用于进行项目相关角色对项目信息及需求进行提交,并进行工作流程的审批流转。Jenkins工具平台采用了控制逻辑与构建动作分离的主从结构,jenkins主节点主要用于分解集成环节,配置各流程步骤逻辑,任务分发等。Jenkins从节点主要用于对分发的任务进行执行,生成中间产出等。鉴于安卓移动客户端构建环境涉及到的工具依赖较多,配置繁杂,将安卓构建从节点环境进行容器化实现,方便后续的复制迁移和维护。

项目发布过程中涉及到众多相关责任角色,包括:

产品经理,其职责包括提交应用信息、代码版本、应用版本、渠道分发信息、新版功能描述等。

测试人员,其职责涵盖对生成应用的功能性测试及集成测试。

项目负责人,对最终产品是否上线,上线时间点进行最终决策。

图3 集成系统整体架构

质量管理人,对整个流程进行过程跟踪,关注环节流转状态,规范安全监督等。

产品经理使用jira平台提交相关产品信息后,由Jenkins系统工具对各单元参数进行base64编码,避免参数传递解析问题。

Jenkins平台获取参数信息后,进行解码和参数适配,并传递给环节编排模块,对整个构建部署过程进行流程编排。该模块也负责工作节点各个分解环节的流转及最终产出整合,定制化通知模块负责对流程中的各个状态,异常等情况进行及时通知告警。角色管理模块负责对项目进行必要的安全约束,对不同角色赋予相应的平台使用权限,同时该模块也负责版本仓库具体路径及密钥配置,原则上该模块由质量管理人负责。

具体从节点使用构建工具如下表:

构建工具 版本 功能Openjdk 1.8 提供jenkins运行环境支持与安卓java代码编译支持Build-tools 28.0 官方提供的安卓构建辅助工具Gradle 5.3.1 自动化构建开源工具,用于解析安卓项目配置,整合构建步骤sshd 跟随系统 用于jenkins主从连接配置

经过编排的具体任务被分发给jenkins工作节点,进行具体处理。工作节点职能主要包括:提供异构环境基础能力,完成客户端构建,第三方工具加固,渠道分发应用生成,应用签名,压缩封装,规范化生产环境产出等。

2.3 移动应用集成发布流程方案

根据中国搜索移动客户端产品开发的特性,移动应用的自动化构建发布分为两个场景,一种是日常迭代开发,另一种是产品的上线和多渠道发布,针对两种应用场景,分别设计了两种构建流程发布方案

2.3.1 日常迭代开发场景下的自动构建流程方案

日常迭代开发过程中,开发人员从源代码主干获取最新的代码签出到本地,编码完成本地测试后,按照配置管理策略将本地副本签入源码主干,jenkins构建平台将自动获取到签入动作通知,依次按顺序执行代码规范检查、构建、单元测试、打包、测试一系列动作,在执行过程中一旦发现错误,将中止后续构建过程,将错误信息实时通知到开发人员,相关人员可在线实时查看执行的过程,也可以继续其他工作,系统将在执行完毕后自动发送执行结果。

图4 日常迭代开发场景下的自动构建流程方案

2.3.2 产品的正式上线和多渠道发布流程方案

基于测试评审通过的代码版本,按计划或需求可进行产品的正式上线和更新发布,日常因运营活动推广的需要,也有多渠道发布的需求,发布到生产环境提供给用户使用的产品,在日常构建的基础上,还需要考虑安全因素,防止出现移动应用被脱壳篡改,植入广告或其他恶意操作的情况,危机用户信息安全,影响使用体验,因此引入第三方加固工具对安装包进行加固操作,加固后的应用包已进行了混淆加密压缩,具备较高的安全性。针对众多应用市场和第三方推广渠道,在发布应用时需要对应用包进行渠道标记,用户在不同市场和推广渠道安装的应用可以通过统计接口进行计量,按照渠道维度进行统计,对移动应用的推广效果,有效活跃用户数量,用户使用习惯等进行收集,以便产品人员进一步分析用户行为,进行产品优化。应用签名作为安卓应用的规范之一,主要用于应用基本信息标注,其中签名也在一定程度上提供了防篡改功能。本方案利用key-store和签名密钥实现了应用包的批量自动化签名步骤,进一步完善了应用客户端发布包的规范信息。加固签名后的应用包还需要经过人工测试验证和审批流程方能发布到生产环境提供给用户使用。

图5 产品的正式上线和多渠道发布流程方案

结语

基于jenkins平台强大的基础能力和灵活的扩展性,中国搜索设计了移动应用开发项目的自动化构建部署流程,涉及到代码构建、渠道分发标记、第三方加固、文件规范化、自动批量签名等步骤,整个流程体现了自动化特点,并将项目相关角色和任务职责有机融合在流转的各个环节,降低了相关人员沟通成本,并使得从项目构建到最终部署的环节操作都有历史留存,方便追溯,既满足了日常开发项目的快速集成的需求,也保证了生产环境的稳定快速发布。

猜你喜欢

代码部署工具
一种基于Kubernetes的Web应用部署与配置系统
晋城:安排部署 统防统治
波比的工具
波比的工具
部署
准备工具:步骤:
创世代码
创世代码
创世代码
创世代码