原因
由于公司专用的CI服务器是linux
的,导致 Unity
相关的CI任务无法在CI服务器上执行,所以专门找了个Windows
的机器来执行 Unity
相关CI任务。
但是那台 Windows
机器配置比较低,导致编译时间很长,尤其是加上CI后经常出现编译排队的情况。因为之前不知道在什么地方看到过Unity
出了linux
版本,所以受不了等待的我开始折腾如何在Linux
上执行 Unity
CI任务。
技术方案
通过使用 ssoor/unity3d:2017.4.8f1-android
镜像使用镜像中的Unity 命令执行编译来执行CI任务。
image: ssoor/unity3d:2017.4.8f1-android
由于公司没有Unity的正版授权,加上Unity个人账号创建的授权和主机名绑定导致 unity 授权没办法通过,最后没辙破解了Unity 文件。
所以这个镜像是破解过的,如果使用官方镜像的话是没办法通过docker来执行的。
编译的时候就和windows 上使用命令一致了,需要注意的是镜像是不包含界面的,所以要使用 xcfb-run
来执行命令。
有了可执行命令之后就可以修改CI脚本在Linux服务器上执行了,具体怎么修改由于每个CI都不一样这里就不放出来了。
core@localhost ~ $ docker run -ti -v /root/src/csclient:/build ssoor/unity3d:2017.4.8f1-android
/ # # 执行编译
/ # xvfb-run --auto-servernum --server-args='-screen 0 640x480x24' /opt/Unity/Editor/Unity \
-quit \
-batchmode \
-logFiledocker \
-projectPath "/build/src" \
-executeMethod "BuildExport.PerformModuleAndroidResource"