Jenkins自動打包IOS與分發fir

20160815

周末看了《大話測試2》突然有想法把公司的IOS打包做一下自動打包和分發,于是今天就開始行動啦!

背景

CI(持續集成)是現在非常流行的軟件開發實踐,可以自動化的持續打包部署代碼或者安裝包,減少了手工干預,大大的提高了工作效率,因此,不論如何,都需要對它做一些了解和實踐。

每次開發完,我們要做的是先找開發打包,打完包后拿來放到fir.im上,再生成二維碼,最后把二維碼做到我們內部分發的網站上分發,然后才能開始測試。整個流程很長,如果當天有很多小問題不斷的修復,那感覺真是坑爹,一兩個小時時間就浪費在這個過程上。使用CI能夠很好的解決這個問題。

環境

我使用的是現在使用比較普遍的Jenkins。打包的對象是IOS。所以首先,你必須有一個Mac。


操作系統:Mac OS X EI Caption 10.11.5

Jenkins版本:2.17


安裝

Jenkins的安裝非常簡單了,只要直接安裝DMG就行了。安裝完畢之后,進入http://localhost:8080就可以看到Jenkins的配置界面了,由于是Web端配置,所以使用起來非常友好。

一下兩個命令可能會經常用到,由于安裝Jenkins的時候,默認是自動啟動的,有時候為了減少不必要的資源消耗,可以關閉Jenkins。

Start Jenkins: sudo launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist
Stop Jenkins: sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist

第一條命令是啟動,第二條命令是關閉。

工作流

本次使用Jenkins的工作流如下圖所示(Jenkins不僅僅只有這些功能,這些只是本次使用的功能)

Jenkins工作流
Jenkins工作流

構建工程

使用Jenkins部署打包IOS程序有一個最大的前提,就是你必須要有一個Mac,否則免談。

Jenkins的安裝就不說了,百度一下一大堆,首先要新建一個自由風格的項目。

項目配置

項目名稱和描述都是給自己看的,因此可以憑自己的喜好填寫,只要自己能看得懂即可。接下來的構建方式我并沒有使用,因為對我來說確實用不到,應用打包完成上傳fir.im之后,基本上這個包就可以丟棄了。有需要的可以按需選擇。

源碼管理,我選擇SVN,其他也是一樣的,配置倉庫地址和賬戶。

Credentials是用戶,右側的ADD按鈕可以添加用戶,其他項默認配置即可。

構建觸發器也是非必須選項,如果不配置則需要手工觸發,我這里配置5分鐘檢查一次代碼倉庫。

具體的配置規則百度即可。

接下來是Xcode的配置,IOS打包有兩種方式,一種是命令行打包,直接寫打包腳本即可。另一種是Jenkins的Xcode插件來實現打包。我使用的是Xcode插件來配置,因為我們的開發說他對項目的工程架構有做過改動,我也嘗試過一下使用命令行,由于對shell一竅不通,所以還是放棄了。

  • Xcode插件——General build settings

Target是構建的目標。如果留空,那么就會構建所有的目標。

Clean before build這個選項建議勾選,構建之前最好Clean一下,至于為什么,我也不知道,我們開發之前打包的時候沒有Clean,有時候會出一些莫名其妙的bug。

Configuration此處填寫Release或者Debug,指的是IOS打包的類型,Debug版本還是Release版本。

Pack application and build .ipa需要打鉤,因為我們需要打包成ipa文件來安裝。

ipa filename pattern打包成ipa文件的名稱,就是最終的xxx.ipa。

Output directory打包輸出的路徑,我這里填寫的${WORKSPACE}指的是/Users/Shared/Jenkins/Home/workspace

其他項我使用的都是默認的,需要的請自己研究,項目右側的問號都有很明確的提示,唯一不爽的就是提示都是英文的。。。。。

  • Xcode插件——Code signing & OS X keychain options

這部分應該算是比較重要的地方,因為這里是配置打包簽名的地方。

首先需要在鑰匙串訪問中找到開發者證書對證書進行權限開放,否則Jenkins無法獲取證書。

然后在配置項中做如下配置。

Keychain path是固定填寫${HOME}/Library/Keychains/login.keychain

Keychain password指的是你的授權密碼,不是證書密碼。

注意:${HOME}目錄指的是Jenkins的根目錄,也就是/Users/Shared/Jenkins,如果你的jenkins是新裝的,你會發現Library目錄中壓根就沒有Keychains目錄。你需要去/Users/SvenWeng/Library目錄下把Keychains目錄復制過來。

  • Xcode插件——Advanced Xcode build options

Xcode Project File是項目的地址,xxx.xcodeproj的地址。

Build output directory是構建后的輸出地址,我這里設置于ipa文件地址一致。

注意:如果你的項目是使用.workspace。請使用Xcode Workspace File,留空Xcode Project File.

到此,Xcode插件的配置就完成了。

構建后執行

這里我使用了Post-Build Script Plug-in插件。

進入我們構建后的目錄,使用fir-cli的命令把打包后的ipa文件上傳到fir.im上,其中-T參數是使用fir.im的token,可以注冊后登陸fir.im查看自己的token。-Q參數是上傳完畢之后把對應的二維碼下載到當前目錄下。

下方還有一個勾選項Execute script only if build succeeds。構建成功才執行這個命令,也就避免了重復上傳的問題。

郵件通知

我使用的是Jenkins自帶的郵件功能,看勾選的結果是構建失敗才會發送郵件,經過我自己的測試,構建成功也能收到郵件,不過我配置的163服務郵箱經常坑爹的拒絕我使用smtp發送郵件。

郵件的內容還是比較人性化的,比如如果檔次構建SVN有變動,Jenkins會把變動日志和打包的日志一起發給你,比如這樣

至此,整個構建就結束了,可以手工觸發來看看結果。

藍色表示構建成功,紅色表示構建失敗。

一些注意點

配置過程中總是會出這樣那樣奇奇怪怪的錯誤。我整理了一下我自己遇到的問題。

  • scheme name是什么鬼

好吧,其實我也不太了解,翻譯上是計劃名稱。其實這個是Xcode的一個配置(不知道這么說準確不準確)。進入方式:Xcode menu > Product > Scheme > Edit scheme點擊Manage Scheme

被我框起來涂掉的地方就是Scheme名稱。

  • Code Sign error: No matching provisioning profile found: Your build settings specify a provisioning profile with the UUID “XXXXX”, however, no such provisioning profile was found.

這個報錯還是由于證書的問題,Xcode工程的證書放在/Users/SvenWeng/Library/MobileDevice/Provisioning Profiles這里,而Jenkins的根目錄是沒有這個東西的,之前我放的是一個錯的證書,所以導致了這樣的報錯。需要把工程證書拷貝到Jenkins根目錄下的Library中。

  • FATAL: Unable to unlock the keychain.

這個報錯是由于你解鎖keychain的密碼不正確,在配置項中需要配置授權密碼(也就是你的mac的登錄密碼),而不是證書的密碼。

  • xcodebuild: error: './workspace/.xcworkspace' does not exist.

這個報錯很明顯了,我的工程使用的是.xcodeproj,而不是.scworkspace,因此在Xcode插件配置的時候需要配置Xcode Project File而不是Xcode Workspace File

  • ERROR: Failed to update svn://xxxx
    org.tmatesoft.svn.core.SVNException: svn: E204899: Cannot create new file '/Users/Shared/Jenkins/Home/workspace/HLSC/.xcodeproj/.svn/lock': No such file or directory

這個報錯也很明顯了,是SVN配置的有問題。

  • xcodebuild: error: The project 'xxx.xcodeproj' does not contain a target named 'XXX'.

這個報錯是target named指定錯誤,檢查一下Xcode的工程是否有相關配置,我報這個錯是因為正確的名字是xxx_iOS,而我打成了xxx_IOS,就是一個大小寫的區別。

后續

后續可以做的事很多啦,比如寫個Python腳本來處理本地的文件,把打包的內容做一下歸檔,然后生成的二維碼通過FTP方式上傳到內部的分發網站上。編寫自動化單元測試,每次代碼改動的時候做一下自動化測試,把Android客戶端也用這種方式自動打包出來等等。。。。

總結

持續集成看上去很高大上,其實走一遍流程,也并不是那么困難,困難的地方Jenkins都幫你處理好了。

配置的時候如果是IOS開發人員,或者對IOS有一定的了解,那么配置起來應該是非常快的,否則最好有一個人來指導你,今天配置的時候我們的IOS開發總能在關鍵點上給一個方向,省去很多時間,不然現在可能都還配不出來,很多報錯網絡上找不到,即使找到了,大多也是英文的,雖然看得懂,但是看起來總是有點不爽。

耐心,耐心,耐心,在配置過程中一定會有各種各樣奇奇怪怪的報錯,有時候看起來很煩,但是一定要有耐心,多靜下心來想想,多看看日志,日志的報錯一般來說都是非常清晰準確的。

多嘗試,配置完就構建一次,反正構建失敗了,電腦不會爆炸,世界也不會毀滅。整個配置過程構建失敗了30次,直到第三十一次才構建成功。

當完成之后,可以省去很多很多很多處理這些雜事的時間。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,993評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,990評論 2 374

推薦閱讀更多精彩內容