使用 Jenkins 實(shí)現(xiàn)持續(xù)集成 (iOS)

利用 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。

設(shè)置好之后驹愚,類似界面如下所示:


最后點(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)載于蒲公英

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末妆兑,一起剝皮案震驚了整個(gè)濱河市魂拦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌搁嗓,老刑警劉巖芯勘,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異腺逛,居然都是意外死亡荷愕,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門棍矛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)安疗,“玉大人,你說我怎么就攤上這事够委〖隼啵” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵茁帽,是天一觀的道長(zhǎng)玉罐。 經(jīng)常有香客問我,道長(zhǎng)潘拨,這世上最難降的妖魔是什么吊输? 我笑而不...
    開封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮铁追,結(jié)果婚禮上季蚂,老公的妹妹穿的比我還像新娘。我一直安慰自己脂信,他們只是感情好癣蟋,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著狰闪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪濒生。 梳的紋絲不亂的頭發(fā)上埋泵,一...
    開封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼丽声。 笑死礁蔗,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的雁社。 我是一名探鬼主播浴井,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼霉撵!你這毒婦竟也來(lái)了磺浙?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤徒坡,失蹤者是張志新(化名)和其女友劉穎撕氧,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體喇完,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡伦泥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了锦溪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片不脯。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖刻诊,靈堂內(nèi)的尸體忽然破棺而出防楷,到底是詐尸還是另有隱情,我是刑警寧澤坏逢,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布域帐,位于F島的核電站,受9級(jí)特大地震影響是整,放射性物質(zhì)發(fā)生泄漏肖揣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一浮入、第九天 我趴在偏房一處隱蔽的房頂上張望龙优。 院中可真熱鬧,春花似錦事秀、人聲如沸彤断。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)宰衙。三九已至,卻和暖如春睹欲,著一層夾襖步出監(jiān)牢的瞬間供炼,已是汗流浹背一屋。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留袋哼,地道東北人冀墨。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像涛贯,于是被迫代替她去往敵國(guó)和親诽嘉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容