你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> Jenkins自動打包IOS與分發fir

Jenkins自動打包IOS與分發fir

編輯:IOS開發綜合

 

末看了《大話測試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部署打包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。<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPjxjb2RlPjxjb2RlPjxjb2RlPjxjb2RlPjxjb2RlPjxjb2RlPk91dHB1dCBkaXJlY3Rvcnm08rD8yuSz9rXEwre+tqOsztLV4sDvzO7QtLXEPGNvZGU+JHtXT1JLU1BBQ0V91ri1xMrHPGNvZGU+L1VzZXJzL1NoYXJlZC9KZW5raW5zL0hvbWUvd29ya3NwYWNlPC9jb2RlPjwvY29kZT48L2NvZGU+PC9jb2RlPjwvY29kZT48L2NvZGU+PC9jb2RlPjwvY29kZT48L3A+DQo8cD48Y29kZT48Y29kZT48Y29kZT48Y29kZT48Y29kZT48Y29kZT48Y29kZT48Y29kZT7G5Mv7z+7O0sq508O1xLa8ysfErMjPtcSjrNDo0qq1xMfr19S8utHQvr+jrM/uxL/T0rLgtcTOyrrFtrzT0Lrcw/fIt7XEzOHKvqOszqjSu7K7y6y1xL7NysfM4cq+trzKx9OizsS1xKGjoaOho6GjoaM8L2NvZGU+PC9jb2RlPjwvY29kZT48L2NvZGU+PC9jb2RlPjwvY29kZT48L2NvZGU+PC9jb2RlPjwvcD4NCjxjb2RlPjxjb2RlPjxjb2RlPjxjb2RlPjxjb2RlPjxjb2RlPjxjb2RlPjxjb2RlPlhjb2RlsuW8/iZtZGFzaDsmbWRhc2g7Q29kZSBzaWduaW5nICZhbXA7IE9TIFgga2V5Y2hhaW4gb3B0aW9ucyA8L2NvZGU+PC9jb2RlPjwvY29kZT48L2NvZGU+PC9jb2RlPjwvY29kZT48L2NvZGU+PC9jb2RlPg0KPHA+PGNvZGU+PGNvZGU+PGNvZGU+PGNvZGU+PGNvZGU+PGNvZGU+PGNvZGU+PGNvZGU+1eKyv7fW06a4w8vjysexyL3P1tjSqrXEtdi3vaOs0vLOqtXiwO/Kx8Xk1sO08rD8x6nD+7XEtdi3vaGjPC9jb2RlPjwvY29kZT48L2NvZGU+PC9jb2RlPjwvY29kZT48L2NvZGU+PC9jb2RlPjwvY29kZT48L3A+DQo8cD48Y29kZT48Y29kZT48Y29kZT48Y29kZT48Y29kZT48Y29kZT48Y29kZT48Y29kZT7K18/I0OjSqtTa1L+z17Sut8POytbQ1dK1vb+qt6LV39akyum21Nakyum9+NDQyKjP3r+qt8WjrLfx1PJKZW5raW5zzt63qLvxyKHWpMrpoaM8L2NvZGU+PC9jb2RlPjwvY29kZT48L2NvZGU+PC9jb2RlPjwvY29kZT48L2NvZGU+PC9jb2RlPjwvcD4NCjxwPjxjb2RlPjxjb2RlPjxjb2RlPjxjb2RlPjxjb2RlPjxjb2RlPjxjb2RlPjxjb2RlPjxpbWcgYWx0PQ=="" src="/uploadfile/Collfiles/20160817/20160817094654997.jpg" title="\" />

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

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次,直到第三十一次才構建成功。

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

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved