flow.ci 初體驗! 記一次暖心的iOS持續(xù)集成

先說一下這次體驗的結果察蹲,將自己的一個項目提交到了flow.ci上,實現了基本的iOS持續(xù)集成的功能遏暴,它讓我們程序員的世界更美好了一點點贡耽。本文篇幅較長衷模,如果你沒時間看可以直接跳到 #詳細流程# 標題下,或者可以直接到flow.ci官網馬上進行體驗蒲赂。

1. 為什么需要iOS持續(xù)集成

持續(xù)集成是敏捷開發(fā)的重要實踐之一阱冶,設想這樣一個場景,你正在考慮如何寫一個正則表達式把HTML5里面的信息提取出來滥嘴,正當你寫到一半的時候木蹬,測試人員突然來到你后面對你說:“后端上接口了,你給這臺iPhone 7打個線上的包我過一下吧”若皱。這時候你剛剛想到一半的思路瞬間消失了镊叁,然后你只能中斷當前的工作,切換一下git分支是尖,將上個版本重新編譯一遍給測試意系。如果這時候storyboard布局還變動了...那你只好和測試人員大眼瞪小眼直到Xcode把應用安裝好了〗刃冢可是如果你的項目里使用了持續(xù)集成,你就能獲得以下優(yōu)點:

  • 迭代速度加快痰催,甚至每次commit都可以交付可運行的代碼兜辞,而測試人員可以盡早進入測試環(huán)節(jié)。
  • 花費在編譯夸溶,分發(fā)這樣低技術含量的時間變少逸吵,打包的成功率提高,節(jié)省更多時間缝裁。
  • 可以接入測試腳本扫皱,在交付給測試人員之前就把低級錯誤發(fā)現出來,比如接口問題,編譯問題等韩脑。

2. 1 為什么選擇flow.ci

主要是因為搭建自建的服務器是非常耗時耗力的!
首先氢妈,iOS工程需要在MacOS環(huán)境下編譯,這個iOS閉源的特點使得我們在選擇服務器上有極大的限制段多。同時首量,每個團隊自建的服務器可能會有一定程度的不同。在錯誤發(fā)生的時候进苍,你的經驗決定了你能否準確定位錯誤加缘,到底是服務器問題?Pod問題觉啊?證書問題拣宏?還是代碼問題?
flow.ci 配置非常簡單杠人,迄今為止勋乾,我對 flow.ci 的體驗大部分情況下還很好。至于定價方面搜吧,因為還處于內測階段市俊,flow.ci 在內測期間完全免費

2.2 為什么最近才開始

是的滤奈,我知道你聽得最多是Jenkins摆昧,第二多是Travis CI
Jenkins需要你有一臺CI服務器蜒程,除非你想把自己的Mac Pro貢獻出來媚污,不然還是申請一臺Mac Mini當CI服務器。Jenkins+gitlab+fir.im已經是一個比較成熟的持續(xù)集成解決方案了庇谆,網絡上也有一大堆教程幔翰,不過問題是需要處理的細節(jié)比較多,個人覺得很麻煩领炫,而且有些問題并不是那么容易找到解決方案的偶垮。
Travis CI目前只對Github上的項目提供持續(xù)集成服務,對于商業(yè)項目來說帝洪,很少會考慮直接放在github上似舵。
因為 flow.ci 對iOS的集成是在11月4日左右內測,也就是說葱峡,這個功能是一個最近才上線的砚哗。據說主要是因為需要大量Mac服務器比較難找,這直接導致了我從 flow.ci 剛剛出現的時候就一直關注到現在才用上...真的蠻久了砰奕。而且這塊功能算是內測中的內測蛛芥,目前(11月17日)還需要向官方發(fā)郵件提鸟,等對方提供內測資格。
新上線的功能直接導致了文檔不全仅淑,如果出了一些問題称勋,沒有現成的文檔可以參考。幸虧官方團隊提供了一個討論組漓糙,反正我在獲得內測資格之后铣缠,馬上進行實驗,然后馬上就碰到問題昆禽,在Google一番未果之后求助于討論組蝗蛙,官方人員在第二天回復了我的問題,完美解決醉鳖。

3. 詳細流程

3.1 前期準備

  1. 獲取mobileprovision文件和p12捡硅,是的,iOS打包內測版時盗棵,需要發(fā)布證書及相關簽名文件壮韭。具體步驟可以參考這里
  2. 整理工程項目纹因,提交到對應的代碼倉庫里喷屋。

3.2 開始創(chuàng)建工作流

首先打開flow.ci的操作面板,點擊創(chuàng)建項目瞭恰。你可以開始選擇代碼倉庫屯曹。目前flow.ci 有四個代碼倉庫類型可選,分別是
GitHub(世界最大的同性交友網站)
Gitlab(大部分公司會使用gitlab自建git倉庫)
Bitbucket(類似中國碼云服務惊畏,支持私有倉庫)
Coding(國內的代碼托管服務恶耽,支持公有和私有倉庫,界面做的很棒颜启,我覺得速度蠻快的)

3.3 授權

github和coding在賬戶登錄的情況下會向你詢問是否提供授權(Auth)偷俭,否則的話會要求你提供 RSA Key和倉庫地址。如果你不知道的話缰盏,可以打開終端涌萤,輸入命令cd ~/.ssh,將想要集成平臺的RSA文件內容提供給flow.ci 口猜。

3.4 配置工作流內容

選擇好想要持續(xù)集成的倉庫之后形葬,點擊創(chuàng)建第一個工作流來開始接下來的設置。

創(chuàng)建工作流界面

直接拉到底部暮的,選擇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
搞定!一個簡單的工作流就添加到了你的項目里愚战。我們繼續(xù)添加其他設置娇唯。

3.5 根據需求自定義工作流

  1. 觸發(fā)器 提供了根據事件觸發(fā)打包的Hook,包括Push寂玲、Pull塔插、Tag操作,你也可以設置幾個定時任務拓哟,比如每天下班后執(zhí)行一次打包想许。
  2. 初始化 提供了初始化時候顯示的一些信息,同時為一些編譯時候的變量進行賦值彰檬,下方提供了自定義輸出的模板可供選擇伸刃。
  3. Git倉庫克隆 即服務器git clone操作
  4. 緩存 即pod安裝包依賴,可以選擇啟用緩存逢倍,那么flow.ci只會在第一次的時候添加依賴(pod install)之后編譯就繼續(xù)使用第一次打包的pod文件捧颅。
  5. 安裝
  6. 編譯 即編譯時候的一些變量,大部分出錯是在這里設置錯了较雕,在自動化打包的時候會有對應的提示信息碉哑。
  7. 完成后,提供了Email和slack提醒方式亮蒋,你可以選擇在成功或者是失敗的情況下發(fā)送郵件到指定郵箱扣典。

3.6 分發(fā)到Fir.im

fir.im 為開發(fā)者提供測試應用極速發(fā)布的服務,測試人員可以通過生成的二維碼直接掃描安裝測試版應用慎玖。工作流中在完成后的左上角有一個+贮尖,點擊之后選擇fir.im上傳插件,將你在fir.im里的token寫在FIR_API_TOKEN中即可趁怔。其他兩個參數可以不填湿硝。

3.7 一些小細節(jié)

  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 應用分發(fā)
flow.ci官方網站

(轉載請注明來源)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末丁稀,一起剝皮案震驚了整個濱河市吼拥,隨后出現的幾起案子,更是在濱河造成了極大的恐慌二驰,老刑警劉巖扔罪,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異桶雀,居然都是意外死亡矿酵,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門矗积,熙熙樓的掌柜王于貴愁眉苦臉地迎上來全肮,“玉大人,你說我怎么就攤上這事棘捣」枷伲” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵乍恐,是天一觀的道長评疗。 經常有香客問我,道長茵烈,這世上最難降的妖魔是什么百匆? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮呜投,結果婚禮上加匈,老公的妹妹穿的比我還像新娘。我一直安慰自己仑荐,他們只是感情好雕拼,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著粘招,像睡著了一般啥寇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天示姿,我揣著相機與錄音甜橱,去河邊找鬼。 笑死栈戳,一個胖子當著我的面吹牛,可吹牛的內容都是我干的难裆。 我是一名探鬼主播子檀,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼乃戈!你這毒婦竟也來了褂痰?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤症虑,失蹤者是張志新(化名)和其女友劉穎缩歪,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體谍憔,經...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡匪蝙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了习贫。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逛球。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖苫昌,靈堂內的尸體忽然破棺而出颤绕,到底是詐尸還是另有隱情,我是刑警寧澤祟身,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布奥务,位于F島的核電站,受9級特大地震影響袜硫,放射性物質發(fā)生泄漏氯葬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一父款、第九天 我趴在偏房一處隱蔽的房頂上張望溢谤。 院中可真熱鬧,春花似錦憨攒、人聲如沸世杀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瞻坝。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間所刀,已是汗流浹背衙荐。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留浮创,地道東北人忧吟。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像斩披,于是被迫代替她去往敵國和親溜族。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內容