说起打包,我们的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:~,%%date:~,%%date:~,%%time:~,%%time:~,%%time:~,%
set "filename=%filename: =0%" REM ,打AssetBudle资源; ,生成APK; ,Copy资源到目标路径 REM 接受Jenkins传入的参数
set parameter=%
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 % -projectPath % -quit -batchmode -executeMethod APKBuild.Build -logFile build.log if not %errorlevel%== ( 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并且支持退出该应用和关闭模拟器!如果有时间,下一篇会和大家一起分享,开源,奉献,程序精神!花了三个多小时写了这篇博客,刚好今天母亲节了,工作再忙,不能忘记父母和家人,父母要的并不多,一个电话足矣!!!晚安,睡觉!!!

  

Unity和Jenkins真是绝配,将打包彻底一键化!的更多相关文章

  1. Unity手游之路<十一>资源打包Assetbundle

    http://blog.csdn.net/janeky/article/details/17652021 在手游的运营过程中,更新资源是比不可少的.资源管理第一步是资源打包.传统的打包可以将所有物件制 ...

  2. “双十一”购物狂欢节,电商运营和商业智能(BI)才是绝配

         百年前,人们获取信息的方式是通过报纸.书籍:十年前,人们获取信息的方式是通过传统PC互联网:而如今,在4G网络高速发展的浪潮下,伴随着移动智能终端的普及,人们获取信息的方式已经逐渐转向了移动 ...

  3. Jenkins+Docker+Git+Harbor流水线打包

    Jenkins+Docker+Git+Harbor流水线打包 环境: CentOS Linux release 7.6.1810 (Core) 192.168.247.214 Jenkins+dock ...

  4. 【爬虫】把抓到数据存起来——爬虫绝配mongodb

    [爬虫]把抓到数据存起来——爬虫绝配mongodb 视频地址 抓取数据的方法,前面的课程该讲的都已经讲了,爬取下来数据只是第一步,第二步就是要先存起来.我们最容易想到的就是存文件里喽,python写文 ...

  5. docker 运行jenkins及vue项目与springboot项目(三.jenkins的使用及自动打包vue项目)

    docker 运行jenkins及vue项目与springboot项目: 一.安装docker 二.docker运行jenkins为自动打包运行做准备 三.jenkins的使用及自动打包vue项目 四 ...

  6. Asp.net Core Jenkins Docker 实现一键化部署

    写在前面 在前段时间尝试过用Jenkins来进行asp.net core 程序在IIS上面的自动部署.大概的流程是Jenkins从git上获取代码 最开始Jenkins是放在Ubuntu的Docker ...

  7. Mac下Unity使用Jenkins自动化打包

    重要的事情说三遍:不要使用jenkins dmg安装包直接安装,用brew安装  PS:会有权限问题 重要的事情说三遍:不要使用jenkins dmg安装包直接安装,用brew安装 重要的事情说三遍: ...

  8. jenkins持续集成配置备忘

    配过好几次,但是老忘记.记录备忘. 安装下列插件: ssh和git插件用来下载源码 publish over ssh 插件用来发布代码到测试环境. email插件用来更强大的email配置. file ...

  9. 【Unity Shaders】Using Textures for Effects——打包和混合textures

    本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...

随机推荐

  1. 使用 Floccus 插件和坚果云同步 Chrome 类浏览器书签

    使用 Floccus 插件和坚果云同步 Chrome 类浏览器书签 魏刘宏  2019 年 11 月 22 日 如题,本文讨论在使用 Chromium 内核的浏览器上,使用 Floccus 插件,配合 ...

  2. ADO.NET中的5个主要对象

    1.Connection:主要是开启程序和数据库之间的连接.没有利用连接对象将数据库打开,是无法从数据库中取得数据的. Close和Dispose的区别,Close以后还可以Open,Dispose以 ...

  3. 引用kernel32.dll中的API来进行串口通讯

    串口通讯可以引出kernel32.dll中的API来操作,相关源码如下:using System;using System.Runtime.InteropServices; namespace Tel ...

  4. Java学习——网络编程

    Java学习——网络编程 摘要:本文主要介绍了什么是网络编程,以及如何使用Java语言进行网络编程. 部分内容来自以下博客: https://www.cnblogs.com/renyuan/p/269 ...

  5. Laravel 创建指定表 migrate

    解决方案:打开创建表的那个 migration 文件,在创建表的方法执行之前加一个判断条件 if (!Schema::hasTable('password_resets')) { Schema::cr ...

  6. window10 蓝牙怎么连接音响或蓝牙耳机

    window10 蓝牙怎么连接音响或蓝牙耳机 1.在电脑上依次点击win图标右键-->设置,打开系统设置窗口. 2.点击“设备”,在窗口左侧选择“蓝牙”,右侧检查并开启电脑的蓝牙设备开关, 3. ...

  7. i春秋四周年中奖名单出炉丨确认过眼神,你是中奖人

    i春秋四周年任性狂欢倒计时最后2天! 优享会员.精品课程.CTF经典赛题实战班.Web安全线上提高班.渗透测试工程师线下就业班.CISAW-Web安全认证......全部史上最低折扣,还有8888元现 ...

  8. elasticsearch ik分词

    elasticsearch 默认并不支持中文分词,默认将每个中文字切分为一个词,这明显不符合我们的业务要求.这里就需要用到ik分词插件. 本文主要囊括了以下几部分,ik插件安装.ik用法介绍.自定义词 ...

  9. PMP备考-第三章-项目管理过程

    过程:完成预定目标的,一系列相互关联的活动的集合,以便运用一些列工具与技术把特定的输入转化成特定的输出. 五大项目管理过程组:启动-规划-执行-监控-收尾 戴明环(PDCA循环):计划-实施-检查-行 ...

  10. PMP备考-第二章-项目运行环境与项目经理

    组织系统的三大因素:组织治理框架,管理要素和组织结构 组织治理和项目治理 组织治理 :组织中的重要决策制定框架,谁有权在什么时候用什么发放做出并推行什么重要决策. 项目治理 :组织为项目建立的高级别的 ...