随着WWDC2015的落幕,有很多新的技术和变更一涌而来,这其中便有关于Xcode Server的,它将会以RESEful的方式来公开API,与之比较相关的,应该就是Xcode原身支持了UI Testing、Code Coverage,这些都是非常棒的功能。如果你致力于打造更强大的移动开发团队、更稳定的移动产品、更迅速的版本迭代,那么或许本篇文章可以给你提供一些思想。
Xcode Server作为苹果官方的一个持续集成方案,它宿主在OSX Server中,主要提供了以下几个功能:
RESTful API
,可在第三方应用系统中进行集成。大体也就这些功能点,下面简单介绍下,如何进行使用。
要使用Xcode Server,首先我们要连接到相应的服务器,点击Xcode中的Xcode
->Preferences...
->Account
:
填写完相应的服务器地址和用户名密码,即可连接到该服务器上,并且在Xcode的Report navigator
上可以看到目前服务器上已有的Bot和相应的集成记录:
当然,如果你从未添加过Bot,则Report navigator
上是不会有这些记录的,接下来我们创建一个Bot。
所谓Bot,就是一个机器人,它负责按照你的设定,进行一些重复性工作。要想让项目能够被Bot识别进行后续的集成操作,则必须将它的Scheme
标记为Shared
的,可以在Xcode的Product
->Scheme
->Manage Schemes...
进行操作:
这里需要注意下,一个Scheme对应一个Bot,也就是说,如果要创建针对同一个项目的不同配置构建(如Debug、Release),则需要配置多个不同的Scheme;而针对同一个项目的不同环境进行构建(如证书签名、支持的CPU架构),则应该配合使用不同的Target。
当我们将Scheme标记为Shared后,就可以创建相应的Bot了,点击Xcode中Product
->Create Bot...
,第一步选择要进行持续集成的Scheme:
上图中红圈部分仅当该Scheme没有被标记为Shared时,才会出现,勾选这里的Share scheme
会自动将该Scheme标记为Shared。这里填写下Bot的名称,进入下一步即可。
第二步是和源代码管理的集成,按照提示完成相应验证即可。接着进入下一步:
这一步是比较关键的一步,选择它的执行频率,可以是周期性的、每次提交代码时和手动这三种。
然后可以配置它要执行的一些动作,是否对项目进行analyze
,是否执行测试和分析代码覆盖率,是否进行归档和创建用户可安装的产品(app或ipa)。
这里也可以配置Debug
或Release
,和清理策略。
后续几步也是非常简单,如果你选择了要执行测试,则会让你配置要在哪些设备和模拟器上进行测试。然后便是触发器配置,最后便是执行创建了。注意,创建完毕后,Xcode提示你需要将该Bot的配置提交到源代码管理远程仓库中,否则Xcode Server将不会进行任何集成操作。
创建完毕并提交后,Xcode Server会立刻进行集成操作,在Xcode的Report navigator
中可以看到相应进度和执行结果:
Summary:
Tests:
Coverage:
关于Xcode Server的基本使用,大体就介绍到这里,如何更好的将其应用到生产环境中,将是接下来的话题。
在日常的协同工作中,我们的最终产品大体会经历下图的几个阶段:
这是一个不断迭代的过程,一旦有新的需求变更,整个流程会重新运转一遍。这个流程本身没什么,而在缺少了持续集成的支援下,会带来以下问题:
当然,问题肯定不止这些,但这些最具代表性,为什么会带来这样的问题?在非互联网企业中,这些问题可能永远都不会对业务造成影响,而在一个互联网企业中,这些应该是生产流水线的基本管理,在质量和细节的把控下,我们不应该容忍这些空缺。随着项目的不断推进、迭代,这些问题最终会导致管理上的失控,代码也会出现僵化,这些都不是我们想看到的。那么,为什么会带来这样的问题?
我们缺少了一套完整的持续集成工作流,毕竟一个项目不可能只有一个开发人员完成,在我们对其它模块未知的情况下,需要通过不断的集成来验证我们的更改,树立我们的信心,并尽早的发现错误。在持续集成的工作流中,我们应该确保任何时间都是可以发布和部署的,这样严格限制了开发人员的代码提交,也限制了开发人员必须完成自我测试。以下是持续集成的一些原则:
基于Xcode Server这样的基础设施和所面临的问题,以下是我觉得比较合理的系统架构:
RESTful API
进行适配和包装的一个服务单元,支援其它系统。上面简略的对这些系统做了介绍,接下来我们基于这样的一个系统架构,来探讨下一些日常的工作流。
首当其冲的自然是开发,开发是最核心的产出,也是对质量影响最大的一个环节。在持续集成系统、风险管控系统、数据分析系统的三大制约下,开发人员需要对代码提交格外小心。自然,如果将测试覆盖率也纳入绩效考核中,则相应模块开发人员自然会尽可能的完成更多的测试,这对最终产品的稳定性无疑是有了更好的保障。
所以开发需要做的便是:
有了CI系统,测试人员的工作量应该会大大降低,特别是在有了UI自动化测试的支援下(这是一个讲究科学的时代,纯手工的操作是低效且容易出错的)。而在进行回归测试的时候,这种好处会更加明显。
所以测试人员要做的便是:
因为持续集成的原则就包含了随时可发布,所以,发布便是在发布系统中挑选CI系统中的构建,点击发布即可(注意发布系统和CI系统的协作关系)。
管理人员基本不会关心CI系统的一些基本情况(他不可能去看你写的测试用例是否正确),因为有更高层的风险管控、数据分析、发布管理三大系统。
现在,回头看看最先前提出的那几个问题,是否都得到了很好的解决?那么接下来的问题,便是如何构建这样一套系统。试想一下,如果风险管控系统和数据分析系统仅仅为CI系统服务,那这两个系统就太鸡肋了,还不如直接集成到CI系统中,但我并没有这么做,因为我将他们都定义为服务化的系统。构建一套完整的互联网企业内系统,我们需要服务化的架构,这便是SOA。
本不打算涉及SOA的,但最终还是谈到了它,不得不说,我觉得它太重要了。一个成熟的互联网企业,离不开服务化的架构,这无论是对现有系统的复用率还是前后端实现分离都有莫大的好处。构建一个强大的SOA体系,前期是需要一定量的投入,但我觉得这对企业的未来布局有着非常重要的作用。
以下是我觉得非常基础的一个SOA架构分布图:
上图中,有五大模块,基本上在SOA的架构中都很常见,这里简单说明下:
服务总线无疑是整个SOA的核心所在,所以针对它的设计上,需要下足功夫,以下是我觉得需要注意的地方:
SOA是互联网企业架构的趋势,无论是大数据还是物联网都离不开它,所以,如果想成为一家一线的互联网企业,应尽早的朝这个方向发展。这里只是简略的提了下,SOA的内容还是相当多的,每个话题展开都可以进行长篇大论,市面上有很多讲企业架构的书也都讲的非常详细,所以,可以从那里了解更多关于这方面的内容。
无论是持续集成还是SOA,在互联网企业中都是非常重要的,本文简略但比较完整的将这些内容进行了讲解,并就自身的一些认知做出了相应的设计。任何理论都不应该仅仅停留在理论阶段,否则它就是空想而已,所以,希望大家能够将从本文中获取的想法付之实践,从而总结出更有效、更实际的方法,也别忘记将它分享出来。
如果需要将Xcode Server与其它平台进行集成,下面是可以进行参考的网址:
Xcode Bots, hosted git repositories, and automated TestFlight builds!
How do I deploy automated builds to TestFlight from an Xcode Bot?
那么,这篇就到这里吧!