你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> iOS可持續化集成: Jenkins+bundler+cocoapods+fastlane

iOS可持續化集成: Jenkins+bundler+cocoapods+fastlane

編輯:IOS開發基礎

1.jpg

作者:@李富強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的封裝:

  1. https://github.com/nomad/shenzhen

  2. http://fastlane.tools

  3. https://github.com/nomad/cupertino

  4. 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 :

blob.png

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到粘貼板

blob.png

然後返回git設置,”Credentials”選擇剛才輸入的username即可。

blob.png

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,進行構建測試。

blob.png

這個測試過程中,我這邊總是會報錯,在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 這些不同的環境下,運行的部署流程是不一樣的。

blob.png

下面我們說一下由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。

blob.png

還有其他的OTA Distribution分發方式:TestFlight,HockeyApp,amazon S3,fir.im,蒲公英,FTP,郵件。不過由於fastlane目前只支持amazon s3的上傳,其他上傳方式必須使用 sh 執行命令。

直接在項目目錄下面運行”fastlane ios alpha”,查看是否可以運行成功並且上傳到蒲公英上面,之後打開Jenkins的Job配置,更換我們之前臨時設置的腳本,更換為使用fastlane的腳本來進行構建即可。

blob.png

注意我們這裡添加的有 “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版本實現的方式研究,這部分在有詳細說明,在”Multiple Versions of the Application”章節內。

參考資料:

  • 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,可惜我目前並沒有應用場景,也就不再繼續學習了,以後有需要再來學習使用。 

版權聲明:本文為博主原創文章,未經博主允許不得轉載。

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