iOS 持续构建平台实践

栏目: 编程工具 · 发布时间: 6年前

58同城App伴随着多年的迭代,业务量的增加,早就迈进了超级App的大门,多条业务线并行研发,百人技术团队参与,项目的快速迭代,对App的质量要求越来越高。无线研发团队对此要保障高质量,高效率的持续交付,本文会对58同城iOS持续构建实践做简单介绍。

背景及目标

首先我们先看一下Git Flow模型,让我们对它有一个大概的了解,如下图所示 iOS 持续构建平台实践 58同城App基本采用Git Flow模型进行开发,其中Develop为当前的版本集成分支,在日常的需求开发中,会首先在版本分支中拉取对应的需求分支(如图中Feature),待开发结束,测试完成后,再将需求分支合并到版本集成分支中。 当然,上述只是对单一工程而言,58同城App的工程及其复杂,通过早期模块化,组件化的配置,由多个工程通过壳工程组装最终编译为App,模块化的简单示意图如下

iOS 持续构建平台实践

在需求开发的时候,需要改变的工程可能是N个,也就对应着N个Git地址,每个Git仓库都需要拉取对应的需求分支,当需求开发完成后N个仓库都需要合并到对应的集成分支上,那么当该版本需求量为M个,最后需要操作的工作量就为N*M,相信这样的工作量对任意一个开发,测试都是一个不小的挑战。 对此我们面临着几个问题:

  1. 多个需求如何保证稳定,有序,高效的合并集成

  2. 如何保证集成分支的稳定性,不污染集成分支

  3. 如何利用自动化测试保证代码质量,产品质量

为了解决如上的一些问题,我们利用React+Node.js自主研发了iOS持续交付平台,将开发流程标准化,将需求,代码,测试,集成关联起来,从流程化转变为自动化。

1.需求与代码关联

在需求提测前,我们规定拉取的需求分支命名规则为 "<集成分支名>_<开发人员姓名>_<需求名称简写>" ,例如: 8.10.0_lilei_mainpage ,且所有涉及的Git仓库均采取同样分支名称,在提测流程中,我们会根据分支名称,自动检索出对应Git仓库,这其中的操作都是通过Gitlab提供的API进行操作的,如下代码为检索工程的全部分支 iOS 持续构建平台实践

我们会对Gitlab组内的所有工程进行分支检索,假设匹配到了相应的分支名,则将改工程保存在数组中,方便之后提交MergeRequest,在平台中我们会要求在提测时输入需求描述,标题等,作为将需求与MergeRequest关联的依据,如下图所示 iOS 持续构建平台实践 最后通过GitlabAPI完成MergeRequest的创建 iOS 持续构建平台实践

2.Jenkins黑盒化

目前大部分公司采用的都是Jenkins实现持续交付,利用Jenkins平台触发打包操作,但是Jenkins本身的操作比较繁琐,且配置比较复杂,但重复操作较多,例如我们提测时需要创建一个Jenkins Job的步骤如下:

  1. 输入Jenkins Job的标题

  2. 配置Gitlab地址

  3. 配置分支名称

  4. 配置打包脚本

  5. 点击立即构建

为了简化开发工作量,我们将创建Jenkins Job变为一步,点击创建即可 iOS 持续构建平台实践 我们会根据之前创建的MergeRequest,自动检索出分支名,需求标题,描述等,作为创建Jenkins Job的配置信息。其中我们操作Jenkins的方式为三方库jenkins,其中Jenkins Job的配置其实是一个XML文件,如下 iOS 持续构建平台实践 这样我们就可以在我们自己的平台中完成与Jenkins平台的相关交互操作,开发无需关注Jenkins内部的相关操作,这也是平台中比较重要的一个组成部分

3.提测邮件模板化

提测邮件往往是提测流程中比较麻烦的一环,开发人员需要在编写邮件的软件内不断切换到各种页面内,寻找需求描述,寻找任务链接,寻找各个人员的邮箱地址等,然后将各种信息再复制粘贴到邮件中,且有时各个开发人员提测的邮件信息内容不统一,会造成QA的困惑,增加沟通成本,为此我们提供了统一提测邮件模板,并由系统发送。 iOS 持续构建平台实践 其中邮件内会自动填充该需求的相关信息,减少开发人员的任务量,以免在提测邮件中浪费过多时间,提升效率。

4.自动化测试保证质量

为了保证代码质量和产品质量,我们在流程中加入了自动化测试 iOS 持续构建平台实践 其中自动化测试主要依赖于我们的西部世界平台,专门处理自动化测试任务,在我们的持续集成平台完成前,该平台就已经存在,我们接入时仅需与它交互即可,其中我们利用了Jenkins进行中转,自动化测试流程如下 iOS 持续构建平台实践 我们在Jenkins Job执行打包后的任务中又增加了一条任务,用来触发自动化测试任务,进行与QA的西部世界平台进行交互。 iOS 持续构建平台实践 若测试结果未通过是不准进入到合并流程中,在修改代码后,重新出发自动化测试任务,直至通过,若遇到不可抗力因素,可通知管理员进行跳过操作,以避免阻塞,在此感谢QA同学的大力支持

5.集成分支预编译检查

iOS 持续构建平台实践 为了避免集成分支受到污染,我们的集成分支是一直处于保护状态的,且只有管理员拥有合并权限,在需求分支集成时,会在当前的集成分支中拉取预合并分支,先将需求分支合并到预合并分支中,提早的发现冲突,并进行编译检查,若编译检查通过,平台会通知管理员进行代码合并,完成一次需求的集成操作。

效果与产出

需求列表效果图 iOS 持续构建平台实践 持续构建平台上线近半年,已完成合并需求100+,发布版本10+,自动化测试任务运行了上百次,保证了产品的质量,平台多App的支持,已完成了4款App产品的接入工作,在未来我们还将继续优化我们的平台系统,更好的为开发,测试,产品服务,让工作简单美好。

iOS 持续构建平台实践


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Bulletproof Web Design

Bulletproof Web Design

Dan Cederholm / New Riders Press / 28 July, 2005 / $39.99

No matter how visually appealing or packed with content a Web site is, it isn't succeeding if it's not reaching the widest possible audience. Designers who get this guide can be assured their Web site......一起来看看 《Bulletproof Web Design》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具