58同城App伴随着多年的迭代,业务量的增加,早就迈进了超级App的大门,多条业务线并行研发,百人技术团队参与,项目的快速迭代,对App的质量要求越来越高。无线研发团队对此要保障高质量,高效率的持续交付,本文会对58同城iOS持续构建实践做简单介绍。
背景及目标
首先我们先看一下Git Flow模型,让我们对它有一个大概的了解,如下图所示 58同城App基本采用Git Flow模型进行开发,其中Develop为当前的版本集成分支,在日常的需求开发中,会首先在版本分支中拉取对应的需求分支(如图中Feature),待开发结束,测试完成后,再将需求分支合并到版本集成分支中。 当然,上述只是对单一工程而言,58同城App的工程及其复杂,通过早期模块化,组件化的配置,由多个工程通过壳工程组装最终编译为App,模块化的简单示意图如下
在需求开发的时候,需要改变的工程可能是N个,也就对应着N个Git地址,每个Git仓库都需要拉取对应的需求分支,当需求开发完成后N个仓库都需要合并到对应的集成分支上,那么当该版本需求量为M个,最后需要操作的工作量就为N*M,相信这样的工作量对任意一个开发,测试都是一个不小的挑战。 对此我们面临着几个问题:
-
多个需求如何保证稳定,有序,高效的合并集成
-
如何保证集成分支的稳定性,不污染集成分支
-
如何利用自动化测试保证代码质量,产品质量
为了解决如上的一些问题,我们利用React+Node.js自主研发了iOS持续交付平台,将开发流程标准化,将需求,代码,测试,集成关联起来,从流程化转变为自动化。
1.需求与代码关联
在需求提测前,我们规定拉取的需求分支命名规则为 "<集成分支名>_<开发人员姓名>_<需求名称简写>"
,例如: 8.10.0_lilei_mainpage
,且所有涉及的Git仓库均采取同样分支名称,在提测流程中,我们会根据分支名称,自动检索出对应Git仓库,这其中的操作都是通过Gitlab提供的API进行操作的,如下代码为检索工程的全部分支
我们会对Gitlab组内的所有工程进行分支检索,假设匹配到了相应的分支名,则将改工程保存在数组中,方便之后提交MergeRequest,在平台中我们会要求在提测时输入需求描述,标题等,作为将需求与MergeRequest关联的依据,如下图所示 最后通过GitlabAPI完成MergeRequest的创建
2.Jenkins黑盒化
目前大部分公司采用的都是Jenkins实现持续交付,利用Jenkins平台触发打包操作,但是Jenkins本身的操作比较繁琐,且配置比较复杂,但重复操作较多,例如我们提测时需要创建一个Jenkins Job的步骤如下:
-
输入Jenkins Job的标题
-
配置Gitlab地址
-
配置分支名称
-
配置打包脚本
-
点击立即构建
为了简化开发工作量,我们将创建Jenkins Job变为一步,点击创建即可 我们会根据之前创建的MergeRequest,自动检索出分支名,需求标题,描述等,作为创建Jenkins Job的配置信息。其中我们操作Jenkins的方式为三方库jenkins,其中Jenkins Job的配置其实是一个XML文件,如下 这样我们就可以在我们自己的平台中完成与Jenkins平台的相关交互操作,开发无需关注Jenkins内部的相关操作,这也是平台中比较重要的一个组成部分
3.提测邮件模板化
提测邮件往往是提测流程中比较麻烦的一环,开发人员需要在编写邮件的软件内不断切换到各种页面内,寻找需求描述,寻找任务链接,寻找各个人员的邮箱地址等,然后将各种信息再复制粘贴到邮件中,且有时各个开发人员提测的邮件信息内容不统一,会造成QA的困惑,增加沟通成本,为此我们提供了统一提测邮件模板,并由系统发送。 其中邮件内会自动填充该需求的相关信息,减少开发人员的任务量,以免在提测邮件中浪费过多时间,提升效率。
4.自动化测试保证质量
为了保证代码质量和产品质量,我们在流程中加入了自动化测试 其中自动化测试主要依赖于我们的西部世界平台,专门处理自动化测试任务,在我们的持续集成平台完成前,该平台就已经存在,我们接入时仅需与它交互即可,其中我们利用了Jenkins进行中转,自动化测试流程如下 我们在Jenkins Job执行打包后的任务中又增加了一条任务,用来触发自动化测试任务,进行与QA的西部世界平台进行交互。 若测试结果未通过是不准进入到合并流程中,在修改代码后,重新出发自动化测试任务,直至通过,若遇到不可抗力因素,可通知管理员进行跳过操作,以避免阻塞,在此感谢QA同学的大力支持
5.集成分支预编译检查
为了避免集成分支受到污染,我们的集成分支是一直处于保护状态的,且只有管理员拥有合并权限,在需求分支集成时,会在当前的集成分支中拉取预合并分支,先将需求分支合并到预合并分支中,提早的发现冲突,并进行编译检查,若编译检查通过,平台会通知管理员进行代码合并,完成一次需求的集成操作。
效果与产出
需求列表效果图 持续构建平台上线近半年,已完成合并需求100+,发布版本10+,自动化测试任务运行了上百次,保证了产品的质量,平台多App的支持,已完成了4款App产品的接入工作,在未来我们还将继续优化我们的平台系统,更好的为开发,测试,产品服务,让工作简单美好。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
迎接互联网的明天
邹静 / 电子工业 / 2011-6 / 55.00元
《迎接互联网的明天-玩转3D Web(附盘)》,全书共5章,第1章主要阐述了国内外空前繁荣的3D互联网技术领域,以及这些领域透射出来的潜在商机;第2章主要用当下比较流行的Flash编程语言ActionScript 3,来向大家介绍面向对象编程语言的思想概念,以及一些3D渲染技术的入门知识;第3章注重建模知识的运用,主要运用WireFusion和3ds Max来制作3D网页;第4章主要介绍3D游戏编......一起来看看 《迎接互联网的明天》 这本书的介绍吧!