利用 Jenkins 和 fastlane 實(shí)現(xiàn) iOS 項(xiàng)目的自動(dòng)構(gòu)建
自動(dòng)打包 iOS 的 ipa 文件并自動(dòng)上傳到蒲公英
注:本文的操作環(huán)境在 Mac OS 10.12 中進(jìn)行。Jenkins 的版本是 2.83,fastlane 的版本是 2.62.0
安裝 fastlane
fastlane 是一個(gè)快速將 iOS 項(xiàng)目打包成 ipa 文件的工具甲脏。要安裝 fastlane铅匹,請(qǐng)參考 fastlane 在 Github 上的的官方文檔酷宵,這里我們不再贅述钩乍。
安裝 Jenkins
在 Mac 環(huán)境下溺拱,我們需要先安裝 JDK卤档,然后在 Jenkins 的官網(wǎng) 下載最新的 war 包蝙泼。下載完成后,打開終端劝枣,進(jìn)入到 war 包所在目錄汤踏,執(zhí)行以下命令:
java -jar jenkins.war --httpPort=8080
待Jenkins啟動(dòng)后,在瀏覽器頁(yè)面輸入以下地址:
http://localhost:8080
這樣就打開Jenkins管理頁(yè)面了舔腾。
注意:使用其他方式安裝的 Jenkins 可能導(dǎo)致后續(xù)步驟失敗溪胶,請(qǐng)確認(rèn)使用我們推薦的方式來(lái)安裝 Jenkins。
自動(dòng)化構(gòu)建設(shè)置
在 Jenkins 中琢唾,所有的任務(wù)都是以“item”為單位的载荔。接下來(lái)我們就新建一個(gè) iOS 的項(xiàng)目來(lái)開始自動(dòng)化構(gòu)建。點(diǎn)擊“新建”采桃,輸入 item 的名稱懒熙,選擇“構(gòu)建一個(gè)自由風(fēng)格的軟件項(xiàng)目”丘损,然后點(diǎn)擊“OK”。
然后按下圖設(shè)置構(gòu)建信息:
源碼管理:
這里主要是設(shè)置源碼的倉(cāng)庫(kù)工扎,以便讓 Jenkins 知道我們的 iOS 項(xiàng)目的代碼在哪里徘钥。因?yàn)槲业拇a放在自己搭建的 GitLab 倉(cāng)庫(kù)中(如果你用 Github 等其他倉(cāng)庫(kù)也是類似),所以要先告訴 Jenkins 如何獲取代碼肢娘。首先呈础,我們需要配置 SSH,我們可以在 Jenkins 的證書管理中添加 SSH橱健。在 Jenkins 管理頁(yè)面而钞,選擇“Credentials”,然后選擇“Global credentials (unrestricted)”拘荡,點(diǎn)擊“Add Credentials”臼节,如下圖所示,我們填寫自己的 SSH 信息珊皿,然后點(diǎn)擊“Save”网缝,這樣就把 SSH 添加到 Jenkins 的全局域中去了。
接下來(lái)蟋定,我們?cè)倩氐絼倓傂陆ǖ娜蝿?wù)中粉臊,在源碼管理中,選擇 Git驶兜,按下圖填好相關(guān)信息扼仲。注意:Credentials 不需要選擇。
構(gòu)建觸發(fā)器設(shè)置
因?yàn)榇私坛滩簧婕白詣?dòng)測(cè)試這塊的流程促王,所以不需要設(shè)置觸發(fā)器犀盟。
構(gòu)建環(huán)境設(shè)置
這里我們是直接用 fastlane 這個(gè)工具,所以這里不需要特別設(shè)置蝇狼。fastlane 會(huì)自動(dòng)讀取本地 iOS 項(xiàng)目中設(shè)置的簽名等信息,所以需要保證本地 iOS 工程已經(jīng)設(shè)置好了正確的簽名信息和 Provisioning Profiles 等文件倡怎,并在 keychain 中已經(jīng)加入了正確的證書迅耘。否則后續(xù)的操作中可能會(huì)出現(xiàn)錯(cuò)誤。如果這里沒有設(shè)置好监署,請(qǐng)用 Xcode 打包工程進(jìn)行相關(guān)設(shè)置即可颤专。
腳本設(shè)置
這一步主要用來(lái)打包 ipa 并上傳到蒲公英。我們點(diǎn)擊“增加構(gòu)建步驟”钠乏,選擇 "Execute Shell"栖秕。輸入下列腳本:
IPANAME="jinkens-myapp"fastlane gym --export_method ad-hoc --output_name ${IPANAME}curl -F "file=@${IPANAME}.ipa" -F "uKey=USER_KEY" -F "_api_key=API_KEY" https://qiniu-storage.pgyer.com/apiv1/app/upload
注意:
其中,USER_KEY 和 API_KEY 可以在蒲公英的「賬戶設(shè)置」中找到晓避,之后進(jìn)行相應(yīng)替換簇捍。
export_method 可以根據(jù)打包類型進(jìn)行相應(yīng)設(shè)置只壳。可選的值有:app-store暑塑、ad-hoc吼句、development、enterprise事格。對(duì)于 Xcode 8.3 以下的版本惕艳,則不需要設(shè)置 export_method。
最后點(diǎn)擊最下面的 Save 按鈕來(lái)保存所有設(shè)置远搪。這樣我們就簡(jiǎn)單的實(shí)現(xiàn)了自動(dòng)打包,并上傳到蒲公英的所有配置了逢捺。
接下來(lái)终娃,我們可以測(cè)試一下。點(diǎn)擊項(xiàng)目頁(yè)面左側(cè)的 Build Now蒸甜,我們可以看到項(xiàng)目已經(jīng)開始構(gòu)建棠耕。在 Console Output 中,我們可以看到項(xiàng)目已經(jīng)成功構(gòu)建柠新,并自動(dòng)上傳到了蒲公英窍荧。
進(jìn)階用法
如果你只是想滿足基本都持續(xù)集成,那么看到這里就可以了恨憎。但是蕊退,如果你想有一些更豐富的定制化功能,可以繼續(xù)往下看憔恳。
上傳到蒲公英時(shí)設(shè)置更新說明瓤荔、訪問密碼
這里,假如我們想讓 ipa 文件上傳到蒲公英后钥组,將 git 上最后一次提交的注釋設(shè)置為蒲公英的更新說明输硝,并且設(shè)置訪問密碼為 123456
,那么可以將上面最后一步時(shí)的 shell 程序改成這樣:
IPANAME="jinkens-myapp"fastlane gym --export_method ad-hoc --output_name ${IPANAME}MSG=`git log -1 --pretty=%B`PASSWORD=123456curl -F "file=@${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 文件上傳到蒲公英后通知其他人
如果開發(fā)者想讓 jenkins 打包并上傳 ipa 文件到蒲公英后程梦,自動(dòng)通知其他人(常用于通知 App 相關(guān)的測(cè)試者)点把,那么可以利用蒲公英的通知功能。蒲公英本身已經(jīng)支持了郵件通知屿附、短信通知郎逃、微信通知。具體設(shè)置方法可以點(diǎn)擊這里查看:接收應(yīng)用更新通知
常見問題
出現(xiàn) fastlane: command not found 怎么辦挺份?
解決方法一:
這個(gè)情況一般是由于 jenkins 沒有設(shè)置正確的 $PATH 環(huán)境變量導(dǎo)致的褒翰。正確設(shè)置的方法為:
在命令行下執(zhí)行 echo $PATH
,記錄下輸出的結(jié)果
在 jenkins 中系統(tǒng)管理-系統(tǒng)設(shè)置中,找到 環(huán)境變量(Environment variables)
在 key 中填寫 PATH优训,在 value 中填寫第一步中輸出的結(jié)果保存即可朵你。
解決方法二:
請(qǐng)確認(rèn)您安裝 Jenkins 的方式和我們?cè)诒疚睦锿扑]的方式一致。使用其他方式安裝的 Jenkins 也經(jīng)常會(huì)出現(xiàn)此問題型宙。
PS:親測(cè)可行撬呢,特來(lái)分享,此文轉(zhuǎn)載于蒲公英