作者:@李富強Jason 授權本站轉載。
工具介紹
1. bundler
bundler用於管理ruby gem的工具,我們用來管理cocoapods以及fastlane的版本號。直接sudo gem install bundler即可。然後在工程的根目錄下,添加Gemfile文件:
source 'http://ruby.taobao.org' source 'http://ruby.taobao.org' gem 'cocoapods', '~>0.37.2' gem 'fastlane', '~>1.4.0'
然後執行,bundle install即可,執行完同時會生成一個Gemfile.lock文件,把這個和Gemfile文件一起添加到git中管理,用這個我們可以很方便大家一起同步gem source和cocoapods以及fasten的版本號。
2. cocoapods
這個不用多說,各方面參考資料已經太多了,這個不了解的話,在iOS開發方面真的是屬於比較薄弱了。
Command Line
1). 我是選擇fastlane作為打包以及分發的工具,這個是在shenzhen基礎之上進行了封裝,非常簡單易用。詳細參考官方的資料即可以及還有一些其他的對xcodebuild的封裝:
https://github.com/nomad/shenzhen
http://fastlane.tools
https://github.com/nomad/cupertino
https://github.com/facebook/xctool,這是facebook對xcodebuild封裝的一個開源庫,也可以用來構建安裝包。
如果安裝有多個Xcode版本,可以使用xcode-select選擇對應的Xcode版本進行build,這個工具也是非常有用的。
使用xcpretty ( https://github.com/supermarin/xcpretty) 對xcodebuild的輸出進行格式化。
使用xcodebuild -list查看所有可用的schemes。
xcrun是Xcode自帶的一個命令行工具,主要有兩個用途: 找到開發工具,執行這些開發工具。比如 xcrun —find ld,用於定位ld工具的位置。xcrun git —version,則是直接執行git —version命令。
總之來說,當我們使用fastlane和shenzhen之後,這部分就變得非常簡單,不需要我們再過多關注。
2). agv — Apple Generic Version 工具的使用
Apple官方提供的更改版本號的功能,設置參考:
http://youandthegang.com/2015/continuous-integration-delivery-with-jenkins/
http://segmentfault.com/a/1190000002423661
Jenkins
1. 安裝啟動
在https://jenkins-ci.org/或者通過命令: "curl -L http://mirrors.jenkins-ci.org/war/latest/jenkins.war -O" 下載jenkins.war都某個目錄下面。 通過命名行 "java -jar jenkins.war" 啟動jenkins,也可以通過 —httpPort 和 —httpListenAddress 指定端口和設定IP來啟動。
如果希望jenkins可以開機自啟動以及異常自動重啟,可以把jenkins設置為Launch Daemon的方式啟動。
1). 運行命令 “sudo touch /Library/LaunchDaemons/org.jenkins-ci.plist” 來創建配置文件
2). 文件的內容如下,參考gist: https://gist.github.com/lihei12345/84a4ed83aa07a9d3a7d7 :
Refer: http://savvyapps.com/blog/continuous-integration-ios-jenkins/,http://9elements.com/io/index.php/continuous-integration-of-ios-projects-using-jenkins-cocoapods-and-kiwi/
3) 重新啟動jenkins就會在後台自啟動了,或者直接使用”sudo launchctl load -w /Library/LaunchDaemons/org.jenkins-ci.plist”命令行
無論通過哪種方式來啟動jenkins,啟動之後,在浏覽器中輸入: http://localhost:8080,就可以直接進入jenkins後台了。
2. Jenkins基本設置
進入jenkins之後,需要做一些基本的設置來設置一個管理賬戶,或者設置LDAP這這樣的通用身份系統認證系統 (參考一篇很棒的文章:http://zhuanlan.zhihu.com/prattle/19974568)
1). 進入系統管理 -> Configure Global Security -> 點擊”啟用安全” 。啟用安全下面選擇,“Jenkins專有用戶數據庫”,勾選允許用戶可以注冊。然後在“授權策略”中選擇“任何用戶可以做任何事(沒有任何限制)”。當然,也可以使用LDAP身份認證機制,直接使用外部統一的身份機制來做認證。
2). 返回注冊一個賬戶,登錄之後再次進入安全管理。勾選“登錄用戶可以做任何事”,這樣就只有登錄用戶才能做操作了。
3). 插件管理,我使用的jenkins版本,發現我所需要的插件都已經添加了,只需要update一下即可。
3. 設置git
1). “新建” —> 勾選“構建一個自由風格的軟件項目” -> “源碼管理”中勾選“Git”
2). 配置repo的URL以及SSH keys生成的private key填入下面的輸入框中。生成SSH keys的過程具體請參考:https://help.github.com/articles/generating-ssh-keys/,對git比較熟悉的話,這個過程應該不會陌生。記得不要忘記把public key添加 repo的訪問權限中,無論是github/gitlab/bitbucket都是類似的。執行下面兩行命令,直接到輸入框裡粘貼即可。
ssh-keygen -t rsa -N "" -f ~/Tools/jenkins.key # 生成key
cat ~/Tools/jenkins.key | pbcopy # 把private key copy到粘貼板
然後返回git設置,”Credentials”選擇剛才輸入的username即可。
4. Jenkins Job設置
1). 使用shenzhen測試構建環境是否正常
在項目的根目錄下,先使用shenzhen直接執行測試,看是否能夠成功構建,沒有構建成功的話,需要google一下解決掉,再往下進行。執行一下命令進行測試:
”ipa build -c Release -d ~/Desktop”
“cd ~/Desktop"
然後上傳到蒲公英或者fir.im平台,之後就可以直接在這些平台上面直接下載了
“ipa distribute:pgyer -u USER_KEY -a APP_KEY” # 上傳到蒲公英
"ipa distribute:fir -u USER_TOKEN -a APP_ID” # 上傳到fir.im
如果發現能夠打包並且下載成功,則在Job的構建裡面添加以下shell命令,https://gist.github.com/lihei12345/5076a737261e97ca0856,進行構建測試。
這個測試過程中,我這邊總是會報錯,在console output中查看一下錯誤信息: “No schemes found in Xcode project or workspace”,解決辦法如下:http://stackoverflow.com/questions/14368938/xcodebuild-says-does-not-contain-scheme,把workspace的shared勾選即可。修復之後,很順利構建成功。
5. fastlane
1) 關於fastlane
在使用shenzhen測試之後,如果一切正常,那我們就可以繼續配置Job了,shenzhen已經是一個非常方便的工具了,但是更近一步,有一個更加自動化和便於使用的工具—fastlane,我們下面基於fastlane配置用於測試分發(fir.im/TestFlight)的AdHoc Job以及上傳到Appstore的App Store Job。fastlane官方關於集成Jenkins的文檔, https://github.com/KrauseFx/fastlane/blob/master/docs/Jenkins.md,內部需要安裝幾個Jenkins插件。在查看fastlane之後,我發現fastlane的確非常強大,可以大大簡化我們的工作,尤其適合個人開發者,但是這個還是有一定學習成本的。
https://github.com/KrauseFx/fastlane
http://www.infoq.com/cn/news/2015/01/fastlane-ios-continuous-deploy
fastlane是一組工具套件,讓你可以定義和運行特定環境下各種部署流程的自動化,它是由fastlane提供的工具(例如snapshot/sigh/deliver等)以及各種第三方工具(例如cocoapods/xctool等)連接在一起組成的,可以提供一個運行良好的可持續部署流程。如下圖,在Test / TestFilght Beta /Appstore 這些不同的環境下,運行的部署流程是不一樣的。
下面我們說一下由fastlane提供的各種工具:
delivery:用於上傳應用的二進制代碼,應用截屏和原數據到 App Store
snapshot:可以自動化iOS應用在每個設備上的本地化截屏過程
frameit:用於在應用截屏外添加設備的邊框
PEM:可以自動化生成和更新應用推送通知描述文件
sigh:可以生成並下載開發者的應用商店配置文件
product:可以使用命令行在iTunes Connect中創建iOS應用以及Developer Portal
cert:可以自動創建並維護iOS的簽名證書
codes:使用命令行來生成應用的優惠碼
2) 配置上傳蒲公英的fastlane
進入到項目根目錄,使用 fastlane init 來初始化fastlane文件,具體步驟可以參考下面的資料:https://github.com/KrauseFx/fastlane/tree/master/docs。可以參考官方提供的各種fastlane腳本的demo來撇只實現自己的項目:
在fastlane文件中,添加直接通過ipa命令蒲公英上傳: sh "ipa distribute:pgyer -f XXX.ipa -a XXX -u XXX”。對於fastlane,因為我自身精力有限,所以我目前只實現了一下簡單的腳本進行上傳蒲公英的操作,沒有實現覆蓋測試以及App Store上傳的fastlane,關於這些方面的實現可以參考文章: http://www.jianshu.com/p/9ae446d76271。在fastlane中添加如下的腳本,gist地址: https://gist.github.com/lihei12345/3bc82ced45b267b1bc2c。
還有其他的OTA Distribution分發方式:TestFlight,HockeyApp,amazon S3,fir.im,蒲公英,FTP,郵件。不過由於fastlane目前只支持amazon s3的上傳,其他上傳方式必須使用 sh 執行命令。
直接在項目目錄下面運行”fastlane ios alpha”,查看是否可以運行成功並且上傳到蒲公英上面,之後打開Jenkins的Job配置,更換我們之前臨時設置的腳本,更換為使用fastlane的腳本來進行構建即可。
注意我們這裡添加的有 “ensure_git_status_clean”,如果我們的gemfile和podfile不是最全面的,在運行Job的時候,運行”bundle install”或者”pod update”命令的時候就會對我們的文件進行修改,這樣Jenkins就會報錯,“Git repository is dirty! Please ensure the repo is in a clean state by commiting/stashing/discarding all changes first”。這個時候,我們只需要運行一遍 “bundle install” 或者 “pod update”命令,然後把這些修改push到origin上即可。
6. 實現不同類型的應用
可以參考wikipedia的fastlane腳本: https://github.com/fastlane/examples/tree/master/Wikipedia,內部實現了無需多個證書即可實現 beta/alpha版本實現的方式研究,這部分在
參考資料:
https://medium.com/ribot-labs/continuous-integration-deployment-for-ios-projects-7358b72ca2e9 (翻譯:http://www.jianshu.com/p/9ae446d76271),對於CI的各個方面覆蓋非常全面,可以參考這個拓展CI的使用
http://youandthegang.com/2015/continuous-integration-delivery-with-jenkins/
http://9elements.com/io/index.php/continuous-integration-of-ios-projects-using-jenkins-cocoapods-and-kiwi/
jenkins + 蒲公英: http://answerhuang.duapp.com/index.php/2015/04/19/jenkins/
http://williamzang.com/blog/2014/07/23/shi-yong-jenkins-plus-calabash-plus-cocoapodsda-jian-ioschi-xu-ji-cheng-huan-jing/
https://github.com/artsy/eigen
http://www.objc.io/issues/6-build-tools/travis-ci/
dysm分析工具:http://answerhuang.duapp.com/index.php/2014/07/06/dsym_tool/
http://macminicolo.net/dayone
http://savvyapps.com/blog/continuous-integration-ios-jenkins/
其他工具
1) PLCrashReport
2) http://bugly.qq.com/
3) https://try.crashlytics.com/
4) http://bughd.com/
總結,搞了兩天,終於把我困惑很久卻一直懶得弄的東西搞完了,從jenkins,shenzhen,fastlane以及單元測試了解一遍等,深深感覺可以極大簡化我們的工作復雜度。同時還有其他一些很酷的特性,比如說HipChat/Slack這樣的IM的構建通知,以及github/gitlab/bitbucket的hook等等,snapshot,覆蓋測試,上傳appstore,可惜我目前並沒有應用場景,也就不再繼續學習了,以後有需要再來學習使用。
版權聲明:本文為博主原創文章,未經博主允許不得轉載。