使用 Jenkins 實(shí)現(xiàn)移動(dòng) APP 持續(xù)集成構(gòu)建檢查

通過《使用Jenkins搭建iOS/Android持續(xù)集成打包平臺(tái)》《關(guān)于持續(xù)集成打包平臺(tái)的Jenkins配置和構(gòu)建腳本實(shí)現(xiàn)細(xì)節(jié)》兩篇文章,我們已經(jīng)在原理概念和實(shí)踐操作兩個(gè)層面掌握了如何搭建一個(gè)完整的持續(xù)集成打包平臺(tái)。

不過,在實(shí)際使用過程中,發(fā)現(xiàn)有時(shí)候還會(huì)存在一個(gè)問題。研發(fā)同學(xué)提交新的代碼后,Jenkins端可以成功執(zhí)行構(gòu)建,并生成安裝包;然而在將安裝包安裝至移動(dòng)設(shè)備時(shí),卻發(fā)現(xiàn)有時(shí)候會(huì)出現(xiàn)無法成功安裝,或者安裝后出現(xiàn)啟動(dòng)閃退的情況。

為了及時(shí)發(fā)現(xiàn)該類問題,我們還需要對(duì)每次構(gòu)建生成的安裝包進(jìn)行檢查。本文便是對(duì)構(gòu)建檢查涉及到的方法進(jìn)行介紹。

構(gòu)建生成.app

為了降低問題的復(fù)雜度,我們可以選擇在模擬器中運(yùn)行構(gòu)建生成的安裝包。之前在《從0到1搭建移動(dòng)App功能自動(dòng)化測(cè)試平臺(tái)(1):模擬器中運(yùn)行iOS應(yīng)用》也講解過,要在模擬器中運(yùn)行iOS應(yīng)用,需要在Xcode中編譯時(shí)選擇模擬器類型,并且編譯生成的文件后綴為.app

對(duì)應(yīng)的,構(gòu)建生成.app的命令如下:

# build .app file from source code
xcodebuild \    # xctool
  -workspace ${WORKSPACE_PATH} \
  -scheme ${SCHEME} \
  -configuration ${CONFIGURATION} \
  -sdk ${SDK} \
  -derivedDataPath ${OUTPUT_FOLDER}

xcodebuild/xctool參數(shù)說明

  • -workspace:需要打包的workspace,后面接的文件一定要是.xcworkspace結(jié)尾的;
  • -scheme:需要打包的Scheme,一般與$project_name相同;
  • -sdk:區(qū)分iphone device和Simulator,可通過xcodebuild -showsdks獲取,例如iphonesimulator9.3。
  • -configuration:需要打包的配置文件,我們一般在項(xiàng)目中添加多個(gè)配置,適合不同的環(huán)境,Release/Debug;
  • -derivedDataPath:指定編譯結(jié)果文件的存儲(chǔ)路徑;例如,指定-derivedDataPath build_outputs時(shí),將在項(xiàng)目根目錄下創(chuàng)建一個(gè)build_outputs文件夾,生成的.app文件將位于build_outputs/Build/Products/${CONFIGURATION}-iphoneos中。

同樣地,這里也可以使用xctool代替xcodebuild。

這里使用到的命令和參數(shù)基本上和《關(guān)于持續(xù)集成打包平臺(tái)的Jenkins配置和構(gòu)建腳本實(shí)現(xiàn)細(xì)節(jié)》一文中的大致相同,唯一需要特別注意的是-sdk參數(shù)。因?yàn)槭且谀M器中運(yùn)行,因此-sdk參數(shù)要設(shè)置為iphonesimulator,而非iphoneos

命令成功執(zhí)行后,就會(huì)在指定的${OUTPUT_FOLDER}目錄中生成${SCHEME}.app文件,這也就是我們構(gòu)建生成的產(chǎn)物。另外,熟悉iOS的同學(xué)都知道,.app文件其實(shí)是一個(gè)文件夾,為了實(shí)現(xiàn)更好的存儲(chǔ),我們也可以額外地再做一步操作,將.app文件夾壓縮轉(zhuǎn)換為.zip格式,而且Appium也是支持讀取.zip格式的安裝包的。

至此,適用于iOS模擬器運(yùn)行的構(gòu)建產(chǎn)物已準(zhǔn)備就緒。這里涉及到的腳本實(shí)現(xiàn)已更新至【debugtalk/JenkinsTemplateForApp】。

實(shí)現(xiàn)構(gòu)建檢查

那要怎樣對(duì)構(gòu)建生成的產(chǎn)物進(jìn)行檢查呢?

最簡(jiǎn)單的方式,就是在iOS模擬器中運(yùn)行構(gòu)建生成的.app,并執(zhí)行一組基本的自動(dòng)化測(cè)試用例。在執(zhí)行過程中,如果出現(xiàn)無法成功安裝,或者安裝成功后啟動(dòng)出現(xiàn)閃退,或者自動(dòng)化測(cè)試用例執(zhí)行失敗等異常情況,則說明我們最新提交的代碼存在問題,需要通知研發(fā)同學(xué)及時(shí)進(jìn)行修復(fù)。

而這些實(shí)現(xiàn)方式,其實(shí)我在《從0到1搭建移動(dòng)App功能自動(dòng)化測(cè)試平臺(tái)》系列文章中都已經(jīng)進(jìn)行了詳細(xì)講解,并形成了一套較為成熟的自動(dòng)化測(cè)試框架,【debugtalk/AppiumBooster】。

在此基礎(chǔ)上,我們無需再做其它工作,只需要按照debugtalk/AppiumBooster的要求在表格中編寫一組基本的自動(dòng)化測(cè)試用例,即可采用如下方式執(zhí)行構(gòu)建檢查。

$ cd ${AppiumBooster_Folder}
$ ruby run.rb -p "${OUTPUT_FOLDER}/${SCHEME}.app.zip" --disable_output_color > test_result.log

在如上命令中,通過-p參數(shù)指定構(gòu)建生成的安裝包,然后就可以在iOS模擬器中運(yùn)行事先編寫好的自動(dòng)化測(cè)試用例,從而實(shí)現(xiàn)構(gòu)建檢查。

在這里,我們還可以通過--disable_output_color開關(guān)將輸出日志的顏色關(guān)閉。之所以實(shí)現(xiàn)這么一個(gè)功能,是因?yàn)樵贘enkins中本來也無法顯示顏色,但是如果還將Terminal中有顏色的日志內(nèi)容輸出到Jenkins中,就會(huì)出現(xiàn)一些額外的字符,比較影響日志的美觀。

現(xiàn)在,我們已經(jīng)分別實(shí)現(xiàn)了代碼構(gòu)建和構(gòu)建檢查這兩個(gè)核心的操作環(huán)節(jié),而要執(zhí)行最終的持續(xù)集成,我們還需要做最后一項(xiàng)工作,即在Jenkins中將這兩個(gè)環(huán)節(jié)串聯(lián)起來。

Jenkins配置

關(guān)于Jenkins的相關(guān)基礎(chǔ)概念、實(shí)施流程和配置細(xì)節(jié),我在之前的文章中已經(jīng)講解得非常詳細(xì)了。在此我就只進(jìn)行一點(diǎn)補(bǔ)充。

要實(shí)現(xiàn)在構(gòu)建完成后再運(yùn)行一些額外的腳本,例如我們的構(gòu)建檢查命令,需要使用到Jenkins的一個(gè)插件,Post-Build Script Plug-in。

安裝完該插件后,在Jenkins配置界面的Post-build Actions欄目中,Add post-build action選項(xiàng)列表中就會(huì)多出Execute a set of scripts選項(xiàng)。選擇該項(xiàng)后,會(huì)出現(xiàn)如下配置界面。

Jenkins Post_build_Actions Execute_shell menu

選擇Execute shell后,會(huì)出現(xiàn)一個(gè)文本框,然后我們就可以將構(gòu)建檢查的命令填寫到里面。

Jenkins Post_build_Actions Execute_shell

在這里我們用到了${AppiumBooster_Folder}參數(shù),該參數(shù)也需要通過String Parameter來進(jìn)行定義,用于指定AppiumBooster項(xiàng)目的路徑。

Jenkins String Parameter

最后,為了便于將執(zhí)行自動(dòng)化測(cè)試用例的日志和執(zhí)行構(gòu)建的日志分開,我們將執(zhí)行自動(dòng)化測(cè)試用例的日志寫入到了test_result.log文件中。然后,在Archives build artifacts中就可以通過${AppiumBooster_Folder}/test_result.log將執(zhí)行構(gòu)建檢查的日志收集起來,并展示到每次構(gòu)建的頁(yè)面中。

延續(xù)一貫的開箱即用原則,我將使用Jenkins實(shí)現(xiàn)持續(xù)集成構(gòu)建檢查涉及到的Jenkins配置也做成了一套模板,并更新到【debugtalk/JenkinsTemplateForApp】中了,供大家參考。

寫在最后

至此,通過本系列的幾篇文章,關(guān)于如何使用Jenkins實(shí)現(xiàn)移動(dòng)APP持續(xù)集成的相關(guān)內(nèi)容應(yīng)該都已經(jīng)覆蓋得差不多了。

不過,由于我個(gè)人的近期工作主要集中在iOS部分,因此在講解的過程中都是以iOS為主。后續(xù)在將工作重心移到Android部分后,我會(huì)再在DebugTalk的這幾篇文章中更新Android部分的內(nèi)容。

最后編輯于
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,021評(píng)論 25 709
  • 準(zhǔn)備工作 Jenkins的安裝 Jenkins依賴于Java環(huán)境,首先需安裝和配置Java環(huán)境(PS:在下載的時(shí)候...
    _Artillery閱讀 4,781評(píng)論 6 22
  • 前言 眾所周知,現(xiàn)在App的競(jìng)爭(zhēng)已經(jīng)到了用戶體驗(yàn)為王,質(zhì)量為上的白熱化階段。用戶們都是很挑剔的。如果一個(gè)公司的推廣...
    偏偏就是禰閱讀 9,341評(píng)論 34 59
  • 寫作,于我并不陌生。而堅(jiān)持寫作,于我,不知從多久開始就像是熟悉的陌生人了。 受父母熏陶,自小學(xué)一年級(jí)暑假在作文指導(dǎo)...
    十六君閱讀 279評(píng)論 0 1

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