本文詳細介紹了開發過程,提高效率進行IOS-Jenkins持續集成。
第二http://blog.csdn.net/monkey_cool/article/details/43270885
背景
平時我們開發完畢IOS項目,須要打包給測試人員進行測試。當中的過程須要反復進行:改動配置項--編譯---連接設備--執行打包--debug進設備中--然后交給等待的測試人員。現有成熟的持續集成Jenkins解決方式。而且該方案也提供了Xcode插件的支持,能夠講上述過程封裝成一鍵解決方式。
我實現的是jenkins運行IOS的job,buildproject。簽名打ipa包,上傳到FTPserver。放到tomcat下,提供http下載安裝app。
過程
1.下載安裝jenkins
官網地址:https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins#InstallingJenkins-Unix%2FLinuxInstallation
下載之后。是個war包(后台服務),是要求有jdk的。
然后直接點擊jenkins.war就可以執行,訪問http://localhost:8080/就可以
也可通過命令行執行 java -jar jenkins.war --httpPort=8888;http://localhost:8888/
也能夠放到tomcat以下。
執行起來后,會在user下創建一個.jenkins文件夾。
2.添加Xcode插件
在jenkins的系統管理中,找到管理插件。可選插件的tab下搜索xcode,勾選安裝,安裝插件/升級處等待—jenkins升級到最新版本號了。xcode插件更好安裝(假設失敗請下載最新的jenkjins,或者多嘗試幾次)。
這樣重新啟動jenkins的話。就會在job的構建中下拉選擇處看到xcode的支持選項。
3.新建job
新建一個free的job.

4.源代碼管理
假設使用svn。選擇subversion,直接指向地址就可以;假設沒有使用svn,選擇none。則須要先執行下job,這樣jenkins的工作文件夾就創建了一個結果failed的job,文件夾為.jenkins/jobs/你的job名字/。
這時候,job下的文件夾還有builds,workspace等文件夾文件,我們須要的就是往workspace中放入我們的代碼project(這是官方的解決方式)。
文件夾結構見下圖。

這樣workspace中就有了代碼。
5.構建xcode項目
在添加構建步驟下拉中選擇xcode。

如上圖,簡單配置參數。運行項目的target,Configuration為Debug(看情況選擇Release),以下還有個Pack application and build .ipa選項,這個我沒選。
以下還有個Code signing和鑰匙鏈的選項。能夠不填。會自己主動找默認的(項目中配置的吧,能夠在執行時的console中看到執行的日志。輸出中會有每一步做什么了)。
在以下還有個xcode的高級參數配置。如圖:

scheme配置。以及須要build執行的SDK,這里選擇iphoneos(這是要准備在真機上執行),還有構建的輸出文件夾。
在這里說下模擬器的事項。這里不能配置成iphonesimulator。是由於沒用。模擬器不能執行起來的,首先蘋果unix命令可以啟動模擬器,可是沒有提供api來命令行方式往模擬器中安裝ipa程序並執行(xcodebuild命令沒有這個支持)。上網找了個解決方式。發現是非常久之前的了,4年前的,有個github的提供的插件。可是這個插件project須要依賴iPhoneSimulatorRemoteClient.framework這個庫。而如今的mac都搜不到這個庫,所以不能執行,so命令行方式啟動模擬器,並安裝執行ipa的方式不行了,僅僅能真機方式來了。
執行job,此時應該能出現當前的文件夾文件,那個ipa還出不來呢。

如今到這。說明jenkins的這個IOS的job已經可以基本ok了。
6.接着我們來實現打包ipa文件
上面那個xcode配置 pack application and build ipa我沒選,那個還沒搞清楚,它的輸出文件夾上下文變成jenkins了。而實際生成的ipa在xcode的安裝文件夾的非常隱蔽的文件夾。這個臨時沒搞清呢。
而我是通過shell來做的,命令行方式。
選擇添加構建步驟,點擊shell的,然后出現個命令行的輸入框。見圖。

依照圖上的命令。選擇sdk 打包app 指定輸出文件夾文件。這樣就能在build完畢后出現上上圖文件夾結構中的ipa文件,這個就是我們須要的安裝程序了,經過簽名的能再真機安裝的。
詳細指定添加簽名和描寫敘述的命令請看xrun的命令說明。
ok,我們已經完畢了一大步了。
7.如今我們再來設置上傳ftp的功能
mac電腦本身支持ftp服務的,而且發現了一個改動系統的便捷軟件。lion tweaks。

找到右側的ftp,開啟就可以。
我們須要設置一下jenkins的系統配置--系統管理鏈接在根路徑左側,點開然后選擇系統設置,下來找FTP的配置項,見圖:

我設置的自己電腦。所以localhost了。設置ftp的根路徑root repository path。填入本機的usernamepassword。
如圖設置自己job的ftp服務,

見圖,設置須要上傳的文件以及其對應的文件夾。如今ipa程序文件的上傳,我們須要將build文件夾生成后的ipa文件上傳到ftpserver的一個文件夾。我們為了興許通過tomcat服務進行手機下載。所以上傳到tomcat的文件夾下。
上傳成功會在tomcat下有此文件夾結構,見圖:

這樣我們上傳文件到ftpserver的就實現了。
8.Tomcat服務
然后我們須要設置tomcat服務,以方便手機可通過網頁下載並安裝我們的應用。
下載tomcat,進入tomcat的bin文件夾,運行命令,
sh startup.sh
啟動tomcat。
新建一個簡單的web項目,這個請簡單看下web自己實現。然后放到tomcat的webapps以下,改動tomcat的訪問port8088,與jenkins8080沖突,這樣我們訪問tomcat的時候,
就能訪問到我們的項目,http://localhost:8088/hello_jenkins2/index.jsp。
9.下載支持文件
如今說明我們的jenkins的job的ftp其它文件上傳是干嘛,ios_down.html是提供一個網頁,能夠點擊一個鏈接從而下載安裝程序到手機。而相對的那個hello_jenkins.plist文件則是支持ipa文件下載到手機的文件。
ios_down的鏈接協議指向這個plist,
<a href="itms-services://?action=download-manifest&url=http://192.168.200.124:8088/hello_jenkins2/publish/hello_jenkins.plist"><h2>Install</h2></a>
這個hello_jenkins.plist里面說明並指向ipa
內容例如以下
<?xml version="1.0" encoding="UTF-8"?
>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>items</key>
<array>
<dict>
<key>assets</key>
<array>
<dict>
<key>kind</key>
<string>software-package</string>
<key>url</key>
<string>http://192.168.200.124:8088/hello_jenkins2/static/build/Debug-iphoneos/HelloJenkins.ipa</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>com.hai.HelloJenkins</string>
<key>bundle-version</key>
<string>1.0</string>
<key>kind</key>
<string>software</string>
<key>subtitle</key>
<string>HelloJenkins</string>
<key>title</key>
<string>HelloJenkins</string>
</dict>
</dict>
</array>
</dict>
</plist>
這樣,瀏覽網頁ios_down.html的時候。點擊上面的install標簽,則指向hello_jenkins.plist文件,並解析再定位到ipa文件,手機同一時候提示下載安裝hello_jenkins了。下載安裝就可以。
10.完畢
手機訪問
http://192.168.200.124:8088/hello_jenkins2/publish/ios_down.html
我的已經安裝到手機了,就不發圖了。
11.最后注意一些問題
注意路徑問題,假設job的ftp文件上傳路徑。html文件和plist文件的路徑有一點不正確。都會造成無法訪問等下載不了問題。
還要注意安裝程序的base sdk與真機的兼容性。否則安不上。
注意ftp的上傳文件夾是基於我們系統設置的用戶文件夾下的。
還有就是假設上傳文件的文件夾沒對上。jenkins是不報錯的,而輸出日志提示not found 文件,所以多看看job的日志。
還有就是有時候plist文件明明是對的可是就是顯示無法訪問。請試試copy一份別處的plist文件,在改動內容,我的以前出現過,copy一份就好了。
ps:
網上這方面的不多,自己花時間研究了下,奉獻給大家了。另一些疑點沒弄清,興許再補充了。
