Unity和Jenkins真是絕配,將打包徹底一鍵化!


 說起打包,我們的QA簡直是要抓狂,這個確實我也很同情他們。項目最開始打包是另一個同事做的,打包步驟是有些繁瑣,但是項目上線后,不敢輕易動啊!每次他們打包總要跟我抱怨,國內版本打包步驟要10多步還能忍,不能忍的是越南版本一下子21步,所以他們也總是調侃我們程序!

QA:"大佬,什么時候能優化下打包流程,說好的一鍵呢?"

我:"大約在冬季,下個項目肯定一鍵,如果有可能給你做個語音的,直接說打包就行了"。

最后純屬開玩笑,好了,廢話不多說了,切入今天正題,如何做到一鍵打包?

1,你了解Jenkins嗎?

  Jenkins是一個開源軟件項目,是基於Java開發的一種持續集成工具,用於監控持續重復的工作,旨在提供一個開放易用的軟件平台,使軟件的持續集成變成可能。主要功能包括:1、持續的軟件版本發布/測試項目。2、監控外部調用執行的工作。這么說比較官方,說白了,它就是一種集承了多種常用的插件於一身的工具平台,通過這個平台你能很方便的管控你的項目!它的強大之處在於它能直接調用外部的shell指令和bat,那么今天我們一起去解開一點點它的什么面紗,為什么說是一點點呢?因為它太強大了,太深了!

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並且支持退出該應用和關閉模擬器!如果有時間,下一篇會和大家一起分享,開源,奉獻,程序精神!花了三個多小時寫了這篇博客,剛好今天母親節了,工作再忙,不能忘記父母和家人,父母要的並不多,一個電話足矣!!!晚安,睡覺!!!

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM