說起打包,我們的QA簡直是要抓狂,這個確實我也很同情他們。項目最開始打包是另一個同事做的,打包步驟是有些繁瑣,但是項目上線后,不敢輕易動啊!每次他們打包總要跟我抱怨,國內版本打包步驟要10多步還能忍,不能忍的是越南版本一下子21步,所以他們也總是調侃我們程序!
QA:"大佬,什么時候能優化下打包流程,說好的一鍵呢?"
我:"大約在冬季,下個項目肯定一鍵,如果有可能給你做個語音的,直接說打包就行了"。
最后純屬開玩笑,好了,廢話不多說了,切入今天正題,如何做到一鍵打包?
1,你了解Jenkins嗎?
1.1,Jenkins是如何安裝的?
我使用的是2.164.2,下載地址在這里:https://jenkins.io/download/ 下載后直接解壓安裝即可,使用需要先安裝jdk,這個就不再廢話了!
1.2, 安裝完成,如何使用呢?
打開你的瀏覽器輸入:http://localhost:8080/ please wait for monment......
根據提示,找到該路徑下的密碼,復制到這里就可以了,接下來是初始化插件,需要等待1-2分鍾
初始化插件完成后是創建用戶和密碼,這看你高興了,愛怎么創建就怎么創建了,我在這里就創建了用戶名:admin 密碼:123456 的用戶,那么准備工作基本完成了!
1.3,如何用Jenkins創建我們第一個任務呢?
任務創建好了,接下來該如何配置這個任務呢?
將你的ssh私鑰添加進來不然去gothub上無法checkout你的project
到此,一個簡單的從GitHub上拉取工程的任務已經好了,構建下任務,也就是執行下我們創建的任務,你會驚喜的發現,github上的工程check下來了,目錄在E:\Jenkins\workspace\Task_BuildAPK,就是你安裝Jenkins的路徑,下面會自動創建工作區間workspace下級目錄就是你的任務名稱,所有關於本任務的操作都會在這個目錄下!大家可能會說這也忒簡單了吧,那么來個稍微復雜點的,通過Jenkins傳入參數來控制AssetBundle的打包方式,我們項目的打包分為全部資源打包和增量打包,這兩種方式我們來嘗試下!
2,小試牛刀,Jenkins參數打包
目標:通過Jenkins參數控制打包方式
2.1,如何通過Jenkins創建參數並將參數傳入Editor下的打包指令中呢?
我們就先定義幾個常用的參數,例如:資源版本號,打包渠道和AssetBundle的打包方式!
參數設置完成最后顯示是這個樣子的
接下來如何將參數傳遞,由於%UnityPath% -projectPath %projectPath% -quit -batchmode -executeMethod AssetBundleFramework.AssetBundleBuilder.BuildAssetBundleCommond -logFile %filename%_buildAssetbundle.log也只能調用Editor下的靜態方法,所以我先將設置好的參數按照一定的格式寫到本地,執行打包指令時再去解析這些參數列表!這樣就能完美的聽從Jenkins參數去執行打包命令了!
打包主要調用了BuildWithParameter.bat,主要完成jenkins參數本地化,assetbundle資源打包和apk打包
@echo off set UnityPath=E:\Unity5.6.6\Unity\Editor\Unity.exe set filename=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2% set "filename=%filename: =0%" REM 1,打AssetBudle資源; 2,生成APK; 3,Copy資源到目標路徑 REM 接受Jenkins傳入的參數 set parameter=%1 echo parameter:%parameter% REM 將Jenkins傳入的參數寫到本地,Editor下讀取在jenkins中設置的版本號和渠道名稱 echo %parameter%>parameter.txt echo Start Build AssetBundle REM BuildAssetBundle %UnityPath% -projectPath E:\Jenkins\workspace\Task_BuildAPK\AssetBundleFramework\AssetBundleFramework-master -quit -batchmode -executeMethod AssetBundleFramework.AssetBundleBuilder.BuildAssetBundleCommond -logFile %filename%_buildAssetbundle.log echo Build AssetBundle Finished echo Start Build APK REM Build APK %UnityPath% -projectPath E:\Jenkins\workspace\Task_BuildAPK\AssetBundleFramework\AssetBundleFramework-master -quit -batchmode -executeMethod PerformBuild.CommandLineBuildAndroid -logFile %filename%_buildApk.log REM %1 -projectPath %2 -quit -batchmode -executeMethod APKBuild.Build -logFile build.log if not %errorlevel%==0 ( goto fail ) else ( goto success ) :success echo Build APK OK REM Copr Dir goto end :fail echo Build APK Fail goto end :end
2.1,這樣到底可行嗎?一起構建一次我們最新的任務看下結果!
不好意思,命令全部走完了,也沒報錯,就是沒生成出來apk,,,最后看日志才知道是這里的問題,坑了我1個多小時.
解決方案:將sdk的路徑添加到全局屬性中的環境變量即可!
再次構建后,打包后生成了參數文件,打包日志文件和apk文件!
3.0,打包成功,Jenkins還能再做點什么呢?
工具之所以成為工具,就是因為你想要的它都能滿足你,這個時候能來個通知就完美了!
3.1,構建結果,通過郵件通知你,怎么配置郵件呢?

郵件主題設置:
【構建通知】$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!
郵件內容模板內容:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次構建日志</title> </head> <body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0"> <table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif"> <tr> 本郵件由系統自動發出,無需回復!<br/> 各位同事,大家好,以下為${PROJECT_NAME }項目構建信息</br> <td><font color="#CC0000">構建結果 - ${BUILD_STATUS}</font></td> </tr> <tr> <td><br /> <b><font color="#0B610B">構建信息</font></b> <hr size="2" width="100%" align="center" /></td> </tr> <tr> <td> <ul> <li>項目名稱 : ${PROJECT_NAME}</li> <li>構建編號 : 第${BUILD_NUMBER}次構建</li> <li>觸發原因: ${CAUSE}</li> <li>構建狀態: ${BUILD_STATUS}</li> <li>構建日志: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li> <li>構建 Url : <a href="${BUILD_URL}">${BUILD_URL}</a></li> <li>工作目錄 : <a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li> <li>項目 Url : <a href="${PROJECT_URL}">${PROJECT_URL}</a></li> </ul> <h4><font color="#0B610B">失敗用例</font></h4> <hr size="2" width="100%" /> $FAILED_TESTS<br/> <h4><font color="#0B610B">最近提交(#$SVN_REVISION)</font></h4> <hr size="2" width="100%" /> <ul> ${CHANGES_SINCE_LAST_SUCCESS, reverse=true, format="%c", changesFormat="<li>%d [%a] %m</li>"} </ul> 詳細提交: <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a><br/> </td> </tr> </table> </body> </html>
將郵件通知配置到我們的任務中
設置完成,再次構建下我們的任務,AssetBundle打包完成,apk生成完畢,郵件發送事件被觸發,Nice!!!
接下來,檢查下郵件上都發送了什么?
意不意外,驚不驚喜,好不好玩?這些我也只是花了2天時間學習的,如果有什么地方寫的不好或者是不正確歡迎指正和交流!大家有問題可以到QQ群:375151422找我交流!
未完待續,我們既然可以自動化生成apk了,那么接下來就是apk的測試了,先給大家看了,我自己沒寫完的測試!自動啟動模擬器,啟動后如果apk已安裝,先卸載,再次安裝最新的apk,然后啟動apk並且支持退出該應用和關閉模擬器!如果有時間,下一篇會和大家一起分享,開源,奉獻,程序精神!花了三個多小時寫了這篇博客,剛好今天母親節了,工作再忙,不能忘記父母和家人,父母要的並不多,一個電話足矣!!!晚安,睡覺!!!