Jenkins+Fastlane實(shí)踐(iOS項(xiàng)目持續(xù)集成)

什么是Jenkins?

??Jenkins是一個(gè)功能強(qiáng)大的應(yīng)用程序,允許持續(xù)集成和持續(xù)交付項(xiàng)目,無(wú)論用的是什么平臺(tái)。這是一個(gè)免費(fèi)的源代碼,可以處理任何類型的構(gòu)建或持續(xù)集成。集成Jenkins可以用于一些測(cè)試和部署技術(shù)。
??上面摘自一個(gè)Jenkins教程網(wǎng)站Jenkins教程。依我個(gè)人理解、實(shí)踐,Jenkins簡(jiǎn)單理解就是一個(gè)Server端的自動(dòng)化工具,幫助我們完成持續(xù)集成(CI:Continuous Integration)的相關(guān)工作。
??本文將通過(guò)Jenkins+Fastlane的方式,實(shí)現(xiàn)Serve端持續(xù)集成(本篇文章基于local server,也就是server在本機(jī)上)。

工作流程

??在開(kāi)始之前,我們先看一下,我們可以做到什么地步?
??一次完整的交付流程如下:


??Jenkins的作用:拉取Git代碼、調(diào)用Fastlane;Fastlane的作用:編譯項(xiàng)目、打包、上傳ipa包到。所以Jenkins需要做的工作很少。

關(guān)于Fastlane

??Fastlane是一些工具的合集,幫助我們實(shí)現(xiàn)持續(xù)交付(CD:Continuous Delivery),關(guān)于Fastlane如何實(shí)現(xiàn)自動(dòng)化打包,可以參考我之前的關(guān)于Fastlane的文章:使用Fastlane對(duì)iOS項(xiàng)目持續(xù)集成(自動(dòng)打包)

安裝Jenkins

??Jenkins是一款基于Web的軟件,需要部署在Server上,我們這里就以本機(jī)為Server,所以將Jenkins上安裝在本機(jī)上,通過(guò)localhost+端口號(hào)的方式進(jìn)行訪問(wèn),Jenkins的安裝請(qǐng)看這里:通過(guò)homebrew安裝Jenkins。
??安裝好后,終端輸入jenkinsjenkins start,Jenkins的服務(wù)就跑起來(lái)了。


??Jenkins默認(rèn)占用了本地的8080端口,所以在瀏覽器中訪問(wèn)http://localhost:8080,就是Jenkins的頁(yè)面了。
??出于安全起見(jiàn),Jenkins一開(kāi)始鎖住的,我們?nèi)enkins提供的路徑下,找到密碼以解鎖:

??輸入密碼后,來(lái)到Jenkins的設(shè)置頁(yè)面:

??Jenkins支持很多插件,比如Xcode打包、項(xiàng)目簽名等,因?yàn)檫@里我們依賴于Fastlane打包,所以我們暫時(shí)先不安裝打包相關(guān)的插件,這里先選擇Install suggested plugins就好,然后等待這些插件安裝完成就好了。

??有些插件會(huì)安裝失敗,不過(guò)沒(méi)關(guān)系,等所有插件都安裝完后(要么成功、要么失?。⑿马?yè)面,然后右下角選擇continue就可以了。接著會(huì)創(chuàng)建一個(gè)管理員用戶,正常創(chuàng)建就好了。緊接著登錄用戶,就來(lái)到了Jenkins的主頁(yè)面:

??如果忘記了用戶名密碼,可以找到~/.jenkins/secrets/initialAdminPassword這個(gè)文件中的密碼,通過(guò)用戶名admin進(jìn)行登錄

創(chuàng)建一個(gè)新任務(wù)

??Jenkins中需要?jiǎng)?chuàng)建任務(wù)以完成各種自動(dòng)化功能,這里我們點(diǎn)擊創(chuàng)建一個(gè)新任務(wù),然后選擇構(gòu)建自由風(fēng)格的軟件項(xiàng)目


??進(jìn)入到配置項(xiàng)目的頁(yè)面后,就可以對(duì)這個(gè)任務(wù)進(jìn)行一些配置了。這里針對(duì)我們公司的項(xiàng)目中用到的設(shè)置進(jìn)行講解。
構(gòu)建參數(shù)

源碼管理

??上面兩項(xiàng)設(shè)置,就做到了對(duì)指定git倉(cāng)庫(kù)的拉取,并且允許我們?cè)诶〉臅r(shí)候選擇git的分支,當(dāng)然參數(shù)是可以不用設(shè)置的,根據(jù)項(xiàng)目的需求進(jìn)行配置即可。
??拉取完成后,就可以調(diào)起Fastlane進(jìn)行項(xiàng)目構(gòu)建了。在構(gòu)建這一步設(shè)置中選擇執(zhí)行shell

??Jenkins會(huì)將之前設(shè)置的git倉(cāng)庫(kù)上的項(xiàng)目代碼checkout到本地,所以我們盡量讓Fastlane也在git倉(cāng)庫(kù)上(fastlane文件夾在git上的項(xiàng)目的目錄下),這樣shell腳本只需要兩步,就可以直接調(diào)起Fastlane了,1、cd到Jenkins checkout下來(lái)的項(xiàng)目的fastlane目錄下;2、執(zhí)行Fastlane命令。所以shell腳本內(nèi)容如下,這里用到了之前設(shè)置的參數(shù)env,使用了shell的if-else語(yǔ)句,寫起來(lái)還比較簡(jiǎn)單:

if [ $env == "測(cè)試環(huán)境" ]; then
        # fastlane構(gòu)建測(cè)試環(huán)境的ipa
    Fastlane ios dev
else
        # fastlane構(gòu)建線上環(huán)境的ipa
    Fastlane ios formal
fi

??這里可以看一下我們項(xiàng)目的目錄結(jié)構(gòu)(工作空間本來(lái)是看不到的,執(zhí)行過(guò)一次左側(cè)的Build with Parameters才會(huì)有,可以先往后面看,之后再回來(lái)看這一部分的內(nèi)容),我們的fastlane文件夾就在項(xiàng)目的根目錄下,所以我們無(wú)需cd就可以直接執(zhí)行fastlane,如果你們的項(xiàng)目的fastlane文件夾在更深的目錄下,則需要cd到相應(yīng)的相對(duì)路徑


??這樣一個(gè)新的任務(wù)就配置完了,接著點(diǎn)應(yīng)用,然后保存,就好了。退出來(lái)后,我們構(gòu)建一下我們的項(xiàng)目,這樣git上的代碼就會(huì)checkout到本地了。

??左下角可以看到Jenkins已經(jīng)開(kāi)始構(gòu)建了:

??點(diǎn)進(jìn)去可以看到構(gòu)建的詳情:

??Fastlane執(zhí)行的也是測(cè)試的lane:

??最終項(xiàng)目會(huì)編譯完打包上傳到蒲公英。

總結(jié)

??以上就實(shí)現(xiàn)了Jenkins+Fastlane的持續(xù)集成(CI),如果想做到公司里的每個(gè)人都可以打包,則需要弄一個(gè)server,Jenkins在server上配置好,大家訪問(wèn)server上的Jenkins頁(yè)面,就可以進(jìn)行各種自動(dòng)化操作了。另外Jenkins還支持對(duì)git進(jìn)行hook操作、定期打包等功能,大家感興趣可以自己去嘗試嘗試。

彩蛋

??如果在文章的開(kāi)頭,就對(duì)Jenkins的老舊的UI沒(méi)有了興致,就關(guān)閉了本篇文章,那你就錯(cuò)過(guò)好東西了。Jenkins提供了另外一個(gè)插件Blue Ocean,一個(gè)皮膚插件,讓Jenkins看起來(lái)更舒服。
??找到Jenkins的系統(tǒng)管理->插件管理->可選插件,搜索Blue Ocean,勾選后選擇直接安裝就可以了。等待所有插件都安裝完成,點(diǎn)擊返回首頁(yè),會(huì)發(fā)現(xiàn)多了一個(gè)Open Blue Ocean的選項(xiàng):


??然后就開(kāi)始享受清新的船新UI吧:

用法補(bǔ)充

定時(shí)構(gòu)建

??如果想定期對(duì)項(xiàng)目進(jìn)行構(gòu)建,比如想每天下班前打包、每隔幾個(gè)小時(shí)打一個(gè)包等,則可以設(shè)置定時(shí)構(gòu)建:


??以上實(shí)現(xiàn)了每天18點(diǎn)進(jìn)行一次構(gòu)建的功能。
??關(guān)于具體的日程的格式,可以參考:
Jenkins定時(shí)構(gòu)建

Git輪詢

??另外如果想Git有新的提交時(shí)才打包,就可以使用Git輪詢功能了:



??這樣每個(gè)小時(shí)會(huì)去查詢Git上是否有新的提交,如果檢查到新的提交,就會(huì)開(kāi)始構(gòu)建。



??定時(shí)構(gòu)建和輪詢可以一起使用。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容