flow.ci 初体验! 记一次暖心的iOS持续集成

先说一下这次体验的结果,将自己的一个项目提交到了flow.ci上,实现了基本的iOS持续集成的功能,它让我们程序员的世界更美好了一点点。本文篇幅较长,如果你没时间看可以直接跳到 #详细流程# 标题下,或者可以直接到flow.ci官网马上进行体验。

1. 为什么需要iOS持续集成

持续集成是敏捷开发的重要实践之一,设想这样一个场景,你正在考虑如何写一个正则表达式把HTML5里面的信息提取出来,正当你写到一半的时候,测试人员突然来到你后面对你说:“后端上接口了,你给这台iPhone 7打个线上的包我过一下吧”。这时候你刚刚想到一半的思路瞬间消失了,然后你只能中断当前的工作,切换一下git分支,将上个版本重新编译一遍给测试。如果这时候storyboard布局还变动了...那你只好和测试人员大眼瞪小眼直到Xcode把应用安装好了。可是如果你的项目里使用了持续集成,你就能获得以下优点:

  • 迭代速度加快,甚至每次commit都可以交付可运行的代码,而测试人员可以尽早进入测试环节。
  • 花费在编译,分发这样低技术含量的时间变少,打包的成功率提高,节省更多时间。
  • 可以接入测试脚本,在交付给测试人员之前就把低级错误发现出来,比如接口问题,编译问题等。

2. 1 为什么选择flow.ci

主要是因为搭建自建的服务器是非常耗时耗力的!
首先,iOS工程需要在MacOS环境下编译,这个iOS闭源的特点使得我们在选择服务器上有极大的限制。同时,每个团队自建的服务器可能会有一定程度的不同。在错误发生的时候,你的经验决定了你能否准确定位错误,到底是服务器问题?Pod问题?证书问题?还是代码问题?
flow.ci 配置非常简单,迄今为止,我对 flow.ci 的体验大部分情况下还很好。至于定价方面,因为还处于内测阶段,flow.ci 在内测期间完全免费

2.2 为什么最近才开始

是的,我知道你听得最多是Jenkins,第二多是Travis CI
Jenkins需要你有一台CI服务器,除非你想把自己的Mac Pro贡献出来,不然还是申请一台Mac Mini当CI服务器。Jenkins+gitlab+fir.im已经是一个比较成熟的持续集成解决方案了,网络上也有一大堆教程,不过问题是需要处理的细节比较多,个人觉得很麻烦,而且有些问题并不是那么容易找到解决方案的。
Travis CI目前只对Github上的项目提供持续集成服务,对于商业项目来说,很少会考虑直接放在github上。
因为 flow.ci 对iOS的集成是在11月4日左右内测,也就是说,这个功能是一个最近才上线的。据说主要是因为需要大量Mac服务器比较难找,这直接导致了我从 flow.ci 刚刚出现的时候就一直关注到现在才用上...真的蛮久了。而且这块功能算是内测中的内测,目前(11月17日)还需要向官方发邮件,等对方提供内测资格。
新上线的功能直接导致了文档不全,如果出了一些问题,没有现成的文档可以参考。幸亏官方团队提供了一个讨论组,反正我在获得内测资格之后,马上进行实验,然后马上就碰到问题,在Google一番未果之后求助于讨论组,官方人员在第二天回复了我的问题,完美解决。

3. 详细流程

3.1 前期准备

  1. 获取mobileprovision文件和p12,是的,iOS打包内测版时,需要发布证书及相关签名文件。具体步骤可以参考这里
  2. 整理工程项目,提交到对应的代码仓库里。

3.2 开始创建工作流

首先打开flow.ci的操作面板,点击创建项目。你可以开始选择代码仓库。目前flow.ci 有四个代码仓库类型可选,分别是
GitHub(世界最大的同性交友网站)
Gitlab(大部分公司会使用gitlab自建git仓库)
Bitbucket(类似中国码云服务,支持私有仓库)
Coding(国内的代码托管服务,支持公有和私有仓库,界面做的很棒,我觉得速度蛮快的)

3.3 授权

github和coding在账户登录的情况下会向你询问是否提供授权(Auth),否则的话会要求你提供 RSA Key和仓库地址。如果你不知道的话,可以打开终端,输入命令cd ~/.ssh,将想要集成平台的RSA文件内容提供给flow.ci 。

3.4 配置工作流内容

选择好想要持续集成的仓库之后,点击创建第一个工作流来开始接下来的设置。

创建工作流界面

直接拉到底部,选择iOS模板

感觉你的工程设置对应的Xcode版本,之后提交工程匹配的证书MobildProvisionp12文件。如果找不到的话可以点击这里来查看。
下面设置构建参数,其实如果你本身有使用xcode自动构建的经验的话,这几个参数和xcodebuild是直接对应的。你可以在工程根目录下,在终端使用 xcodebuild -list命令查看信息来帮你确定下面五个输入参数。
FLOW_IOS_COMPILE_WORKSPACE 如果你是集成了CocoaPods的话,这里写的应该是你的工程名.xcworkspace! 注意的是这个地方如果不为空,那么FLOW_IOS_COMPILE_PROJECT应该设置为空,二者取其一。
FLOW_IOS_COMPILE_PROJECT 如果你是一个小项目而且没有集成CocoaPods的话,可以填工程名.xcodeproj ! 注意的是这个地方如果不为空,那么FLOW_IOS_COMPILE_WORKSPACE应该设置为空,二者取其一。
FLOW_IOS_COMPILE_SCHEMETargets下面的,如果有多个就需要指定你想要打包的target

FLOW_IOS_COMPILE_SDK 保持默认值即可
FLOW_IOS_COMPILE_CONFIGURATION Debug
搞定!一个简单的工作流就添加到了你的项目里。我们继续添加其他设置。

3.5 根据需求自定义工作流

  1. 触发器 提供了根据事件触发打包的Hook,包括Push、Pull、Tag操作,你也可以设置几个定时任务,比如每天下班后执行一次打包。
  2. 初始化 提供了初始化时候显示的一些信息,同时为一些编译时候的变量进行赋值,下方提供了自定义输出的模板可供选择。
  3. Git仓库克隆 即服务器git clone操作
  4. 缓存 即pod安装包依赖,可以选择启用缓存,那么flow.ci只会在第一次的时候添加依赖(pod install)之后编译就继续使用第一次打包的pod文件。
  5. 安装
  6. 编译 即编译时候的一些变量,大部分出错是在这里设置错了,在自动化打包的时候会有对应的提示信息。
  7. 完成后,提供了Email和slack提醒方式,你可以选择在成功或者是失败的情况下发送邮件到指定邮箱。

3.6 分发到Fir.im

fir.im 为开发者提供测试应用极速发布的服务,测试人员可以通过生成的二维码直接扫描安装测试版应用。工作流中在完成后的左上角有一个+,点击之后选择fir.im上传插件,将你在fir.im里的token写在FIR_API_TOKEN中即可。其他两个参数可以不填。

3.7 一些小细节

  1. fir.im上的二维码扫描后进入安装,但是手机报告无法安装该应用 - 可能是在MobileProvision中没有将这台手机添加到测试列表中。
  2. Code signing is required for product type 'Application' in SDK 'iOS 10.1' 关闭Automatically manage signing,在signing中手动选择mobileprovision证书名。
  3. You cannot specify both an Xcode project and a workspace. 编译变量 FLOW_IOS_COMPILE_WORKSPACEFLOW_IOS_COMPILE_PROJECT选择一个填就好了。
  4. The workspace named "XXX" does not contain a scheme named "XXX". 查看你是不是选择对了Scheme。如果确认自己写的是正确的,那么在检查Manage scheme是否开启shared

4. 下一步目标

集成单元测试和UI测试

5. 相关资源

flow.ci 讨论组
Fir.im 应用分发
flow.ci官方网站

(转载请注明来源)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,784评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,745评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,702评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,229评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,245评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,376评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,798评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,471评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,655评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,485评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,535评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,235评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,793评论 3 304
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,863评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,096评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,654评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,233评论 2 341

推荐阅读更多精彩内容