写在最前:
有时候会有频繁的出包需求,比如版本迭代频繁,或者策划改动频繁,从而导致程序需要不停的去打包机去打包。这个时候就可以简单配置一个让策划操作方便,界面化友好的打包工具,用Jenkins+Python,实现一个远程可登陆的打包工具,让策划在自己的工位上可以分分钟自己操作打包。
想了想,好像也没什么可细化的地方,大概流程如下:
构建流水线工程的操作就不再赘述,简单记录一下我用到的参数吧。
Homepage-Project-Configure-General:
勾选参数化构建,然后新建一些需要的参数,比如string类型,bool类型等。
不过这里有一个小坑:bool类型的值Python在接收的时候也会识别为string类型,所以这里要自己处理一下。
我是在这里配置了打包要用的unity的路径,打包工程地址,和是否执行svn的更新啊等等一些参数,具体哪些参数需要动态配置的,需要暴露给策划去填的,可以自己按需配置下。
参数配置完成之后便需要配置打包操作,下拉至Build选项,可以新建一些打包操作,比如执行Windows下的批处理,或者shell的命令行操作等等,如果这里没有你需要的操作,可以转至Jenkins的插件中心,去下载相应的插件,之后再回到这里,便可以添加你需要的操作。
我这里直接添加的shell命令,执行的就是本地写好的python脚本:
之后回到构建的工程里,点击Build with Parameters,将会看到自己所配置的所有参数。
参数填写正确之后,点击Build即可开始打包!
大概分为以下几个脚本:
里面主要配置打包需要的参数,需要暴露给策划的,然后从Jenkins接收的参数,都用下面的方法来接收,剩下的都直接写死在了Python脚本里。
os.getenv(str)
这个可以按需配置下:
1.svn更新:预更新,获取svn版本号,更新至指定版本。
我这边做的是,如果开启svn更新,同时不指定版本文件的话,直接默认更新至最新,同时生成最新版本的一个配置文件(一个jason字符串,存了代码资源的版本号),上传至svn。部分代码仅供参考:
2.AutoBundle.py,打assetbundle:os.system(cmd),调用C#静态方法,打ab包。
3.AutoPackage.py,开始打包:方法同上。
unity端主要做的事情就是给Python提供一个静态方法,以供调用,准确的说是两个方法吧,一个用来打ab资源,一个用来打包(因为有时候需要重新打ab,有时候不需要,所以这里做一下细分)。
同理,unity打包时也需要很多参数,比如包名,版本号,是否开启IL2CPP啊等一些列设置,其实这些如果需要策划手动配置的话,也可以直接在Jenkins里参数化构建,然后在调用C#脚本时传进去。
我这里用的方法比较偷懒,是直接在本地写了一个Jason字符串,每次打包的时候,自动去读这个字符串,然后从里面获取打包时的各种参数。
主要用到的关键字就是:
static、PlayerSettings、BuildPlayerOptions、
BuildPipeline.BuildAssetBundles()//打AssetBundles
BuildPipeline.BuildPlayer()//打包
具体打包代码都搜得到,就不贴出来了。
写在最后,其实也没什么好记录的,总体步骤无非就是:Jenkins-Python-C#,参数化构建-脚本化-unity编译并执行static方法:出包!然后打完包有其他需求的话可以在构建选项后添加构建成功操作,比如把打出来的包发送至指定邮箱等等,发送邮件可以参考这个:https://blog.csdn.net/qq302756113/article/details/106501080
记录几个坑吧:
1.bool类型的值在从Jenkins传入Python时会识别为string类型,还是小写的true和false,需要自己处理下。
2.由于我是在mac上配置的Jenkins,Jenkins在执行python xxx.py时,执行的python版本可能会和mac本身shell终端的python不是一个版本,而且我折腾来折腾去发现,Jenkins的python版本始终是非常古老的2.7版本,各种编译失败,各种路径问题,就很头疼,最后搞了半天也没指定mac上3.8的版本,后放弃。
3.由于最近unity官方打击破解版力度比较大,频繁需要激活认证,要是莫名其妙打包失败,记得看一下是不是unity未激活- -。
4.mac上有个后缀名为.DS _Store的隐藏文件,在执行默认bundle打包时,如果把这个打进去,可能会导致bundle加载失败,建议在打bundle时过滤掉这个。
5.一定要手动指定Jenkins工程的工作空间,不然Jenkins会自动指定工作空间,可能会出现一些诡异的问题。
6.Jenkins一定要用brew安装,否则可能会有权限问题!!!
7.Jenkins一定要用brew安装,否则可能会有权限问题!!!
8.Jenkins一定要用brew安装,否则可能会有权限问题!!!
暂时想不起来别的了,先这样吧。