说起打包,我们的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:JenkinsworkspaceTask_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.6UnityEditorUnity.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:JenkinsworkspaceTask_BuildAPKAssetBundleFrameworkAssetBundleFramework-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:JenkinsworkspaceTask_BuildAPKAssetBundleFrameworkAssetBundleFramework-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并且支持退出该应用和关闭模拟器!如果有时间,下一篇会和大家一起分享,开源,奉献,程序精神!花了三个多小时写了这篇博客,刚好今天母亲节了,工作再忙,不能忘记父母和家人,父母要的并不多,一个电话足矣!!!晚安,睡觉!!!