蒲公英文檔中心

使用 Jenkins 實現持續集成 (iOS)

本文將教會你:

  1. 利用 Jenkins 和 fastlane 實現 iOS 項目的自動構建
  2. 自動打包 iOS 的 ipa 文件并自動上傳到蒲公英

注:本文的操作環境在 Mac OS 10.12 中進行。Jenkins 的版本是 2.19.1,fastlane 的版本是 2.28.2

安裝 fastlane

fastlane 是一個快速將 iOS 項目打包成 ipa 文件的工具。要安裝 fastlane,請參考 fastlane 在 Github 上的的官方文檔,這里我們不再贅述。

安裝 Jenkins

在 Mac 環境下,我們需要先安裝 JDK,然后在 Jenkins 的官網 下載最新的 war 包。下載完成后,打開終端,進入到 war 包所在目錄,執行以下命令:

java -jar jenkins.war --httpPort=8080

待Jenkins啟動后,在瀏覽器頁面輸入以下地址:

http://localhost:8080

這樣就打開Jenkins管理頁面了。

注意:使用其他方式安裝的 Jenkins 可能導致后續步驟失敗,請確認使用我們推薦的方式來安裝 Jenkins。

自動化構建設置

在 Jenkins 中,所有的任務都是以“item”為單位的。接下來我們就新建一個 iOS 的項目來開始自動化構建。點擊“新建”,輸入 item 的名稱,選擇“構建一個自由風格的軟件項目”,然后點擊“OK”。

此處輸入圖片的描述

然后按下圖設置構建信息:

此處輸入圖片的描述

源碼管理:

這里主要是設置源碼的倉庫,以便讓 Jenkins 知道我們的 iOS 項目的代碼在哪里。因為我的代碼放在自己搭建的 GitLab 倉庫中(如果你用 Github 等其他倉庫也是類似),所以要先告訴 Jenkins 如何獲取代碼。首先,我們需要配置 SSH,我們可以在 Jenkins 的證書管理中添加 SSH。在 Jenkins 管理頁面,選擇“Credentials”,然后選擇“Global credentials (unrestricted)”,點擊“Add Credentials”,如下圖所示,我們填寫自己的 SSH 信息,然后點擊“Save”,這樣就把 SSH 添加到 Jenkins 的全局域中去了。

此處輸入圖片的描述

接下來,我們再回到剛剛新建的任務中,在源碼管理中,選擇 Git,按下圖填好相關信息。注意:Credentials 不需要選擇。

此處輸入圖片的描述

構建觸發器設置

因為此教程不涉及自動測試這塊的流程,所以不需要設置觸發器。

構建環境設置

這里我們是直接用 fastlane 這個工具,所以這里不需要特別設置。fastlane 會自動讀取本地 iOS 項目中設置的簽名等信息,所以需要保證本地 iOS 工程已經設置好了正確的簽名信息和 Provisioning Profiles 等文件,并在 keychain 中已經加入了正確的證書。否則后續的操作中可能會出現錯誤。如果這里沒有設置好,請用 Xcode 打包工程進行相關設置即可。

  • 腳本設置

這一步主要用來打包 ipa 并上傳到蒲公英。我們點擊“增加構建步驟”,選擇 "Execute Shell"。輸入下列腳本:

IPANAME="jinkens-myapp"
fastlane gym --export_method ad-hoc --output_name ${IPANAME}
curl -F "[email protected]${IPANAME}.ipa" -F "uKey=USER_KEY" -F "_api_key=API_KEY" https://qiniu-storage.pgyer.com/apiv1/app/upload

注意:

  1. 其中,USER_KEY 和 API_KEY 可以在蒲公英的「賬戶設置」中找到,之后進行相應替換。
  2. export_method 可以根據打包類型進行相應設置??蛇x的值有:app-store、ad-hoc、development、enterprise。對于 Xcode 8.3 以下的版本,則不需要設置 export_method。

設置好之后,類似界面如下所示:

此處輸入圖片的描述

最后點擊最下面的 Save 按鈕來保存所有設置。這樣我們就簡單的實現了自動打包,并上傳到蒲公英的所有配置了。

接下來,我們可以測試一下。點擊項目頁面左側的 Build Now,我們可以看到項目已經開始構建。在 Console Output 中,我們可以看到項目已經成功構建,并自動上傳到了蒲公英。

Started by user root
Building in workspace /Users/rexshi/.jenkins/workspace/monitor
 > git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
 > git config remote.origin.url http://git.xxx.com/root/monitor.git # timeout=10
.......

[15:03:28]: $ xcodebuild -list -project ./monitor.xcodeproj
[15:03:30]: $ xcodebuild clean -showBuildSettings -scheme monitor -project ./monitor.xcodeproj
[15:03:32]: Building monitor/monitor [Release]
[15:03:32]: Check Dependencies
[15:03:32]: Compiling AppDelegate.m
[15:03:33]: Compiling main.m
[15:03:38]: Touching monitor.app
......

[15:03:41]: Successfully exported and compressed dSYM file
[15:03:41]: Successfully exported and signed the ipa file:
[15:03:41]: /Users/rexshi/.jenkins/workspace/monitor/jinkens-myapp.ipa
+ curl -F [email protected] -F uKey=4a5bc52e6763795e18b69bd82dd23xxx -F _api_key=7f158b3d9063c73cd68f0ee40215xxxx https://qiniu-storage.pgyer.com/apiv1/app/upload
{"code":0,"message":"","data":{"appKey":"602979def164c47b9570f17656a4fxxxx","userKey":"4a5bc52e6763795e18b69bd82dd23xxx","appType":"1","appIsLastest":"1"
......

Finished: SUCCESS

進階用法

如果你只是想滿足基本都持續集成,那么看到這里就可以了。但是,如果你想有一些更豐富的定制化功能,可以繼續往下看。

上傳到蒲公英時設置更新說明、訪問密碼

這里,假如我們想讓 ipa 文件上傳到蒲公英后,將 git 上最后一次提交的注釋設置為蒲公英的更新說明,并且設置訪問密碼為 123456,那么可以將上面最后一步時的 shell 程序改成這樣:

IPANAME="jinkens-myapp"
fastlane gym --export_method ad-hoc --output_name ${IPANAME}

MSG=`git log -1 --pretty=%B`
PASSWORD=123456
curl -F "[email protected]${IPANAME}" -F "uKey=USER_KEY" -F "_api_key=API_KEY" -F "updateDescription=${MSG}" -F "password=${PASSWORD}" https://qiniu-storage.pgyer.com/apiv1/app/upload

ipa 文件上傳到蒲公英后通知其他人

如果開發者想讓 jenkins 打包并上傳 ipa 文件到蒲公英后,自動通知其他人(常用于通知 App 相關的測試者),那么可以利用蒲公英的通知功能。蒲公英本身已經支持了郵件通知、短信通知、微信通知。具體設置方法可以點擊這里查看:接收應用更新通知

常見問題

出現 fastlane: command not found 怎么辦?

解決方法一:這個情況一般是由于 jenkins 沒有設置正確的 $PATH 環境變量導致的。正確設置的方法為:

  1. 在命令行下執行 echo $PATH,記錄下輸出的結果
  2. 在 jenkins 中系統管理-系統設置中,找到 環境變量(Environment variables)
  3. 在 key 中填寫 PATH,在 value 中填寫第一步中輸出的結果
  4. 保存即可。

解決方法二:請確認您安裝 Jenkins 的方式和我們在本文里推薦的方式一致。使用其他方式安裝的 Jenkins 也經常會出現此問題。

彩票中心新浪竞技风票