GitLab CIでUnityスクリプトのユニットテストがしたかった話 (1)
作成中のUnityエディタ拡張のコード規模が徐々に大きくなってきて、まれにデグレが発生するようになってしまった。
私はプロジェクトの隅々まで超人的な気配りができるスーパーエンジニアにはなれなかったので、自動でユニットテストが実行される環境が無いとこのままでは精神の安定が保てない。
開発環境
プロジェクトの開発環境は下記の通り
- OS: Windows 8.1 x64 Pro
- Unity: 5.4.1f Pro
- IDE: Visual Studio: 2015 Pro
- 言語: C#
- レポジトリ: GitLab
ソースコードは GitLab で管理しているため、当然の流れで GitLab CI でのユニットテスト環境構築に手を付けた。
なお諸事情により外部サービスを使用することはできない。
対応方法検討
何パターンかやりかたを考えた。
- Unity Editor Tests Runner on Linux on Docker
- NUnit Console Runner on Mono on Linux on Docker
- Unity Editor Tests Runner on Windows
Unity Editor Tests Runner on Linux on Docker
Unity をインストールした Linux の Docker イメージ上で、Unity の Editor Tests Runner をコマンドラインモードで起動する。
このページの記事がベース。(というかほぼそのまま)
GitLab CI with Unity3D in Docker
Dockerfile
FROM ubuntu:xenial
RUN apt-get update -qq \
&& apt-get install -qq -y \
curl \
gconf-service \
lib32gcc1 \
lib32stdc++6 \
libasound2 \
libc6 \
libc6-i386 \
libcairo2 \
libcap2 \
libcups2 \
libdbus-1-3 \
libexpat1 \
libfontconfig1 \
libfreetype6 \
libgcc1 \
libgconf-2-4 \
libgdk-pixbuf2.0-0 \
libgl1-mesa-glx \
libglib2.0-0 \
libglu1-mesa \
libgtk2.0-0 \
libnspr4 \
libnss3 \
libpango1.0-0 \
libstdc++6 \
libx11-6 \
libxcomposite1 \
libxcursor1 \
libxdamage1 \
libxext6 \
libxfixes3 \
libxi6 \
libxrandr2 \
libxrender1 \
libxtst6 \
zlib1g \
debconf \
npm \
xdg-utils \
lsb-release \
libpq5 \
xvfb \
&& rm -rf /var/lib/apt/lists/*
RUN mkdir -p /root/.cache/unity3d
RUN mkdir -p /root/.local/share/unity3d
ENV UNITY_PKG=unity-editor-5.5.0b5+20160927_amd64.deb
RUN curl -o $UNITY_PKG -s http://download.unity3d.com/download_unity/linux/$UNITY_PKG \
&& dpkg -i $UNITY_PKG \
&& rm $UNITY_PKG
上記のDockerfileのあるディレクトリで、コマンド実行$ sudo docker build -t unity:5.5.0b5
$ sudo docker run -it -v <project_path>:/workspace unity:5.5.0b5 bash
# 以下Dockerコンテナ内
$ cd workspace
$ xvfb-run --server-args="-screen 0 1024x768x24" /opt/Unity/Editor/Unity -projectPath $(pwd) -batchmode -runEditorTests -force-opengl -logFile
mono profile = '/opt/Unity/Editor/Data/Mono/lib/mono/2.0'
Initialize mono
Mono path[0] = '/opt/Unity/Editor/Data/Managed'
Mono path[1] = '/opt/Unity/Editor/Data/Mono/lib/mono/2.0'
Mono path[2] = '/opt/Unity/Editor/Data/UnityScript'
Mono path[3] = '/opt/Unity/Editor/Data/Mono/lib/mono/2.0'
Mono config path = '/opt/Unity/Editor/Data/Mono/etc'
Using monoOptions --debugger-agent=transport=dt_socket,embedding=1,defer=y,addre
ss=0.0.0.0:56040
Selecting FBConfig
GLX_FBCONFIG_ID=86
GLX_BUFFER_SIZE=32
GLX_DOUBLEBUFFER=1
GLX_RED_SIZE=8
GLX_GREEN_SIZE=8
GLX_BLUE_SIZE=8
GLX_ALPHA_SIZE=8
GLX_DEPTH_SIZE=24
GLX_STENCIL_SIZE=8
GLX_SAMPLES_ARB=0
GLX_SAMPLE_BUFFERS_ARB=0
GLX_STEREO=0
GLX_CONFIG_CAVEAT=NONE
DisplayProgressbar: Unity license
アクティベーションが必要らしい。どうやら Unity 5.4 からのライセンス体系変更でこうなったみたいだ(Unity 5.4 でも同様にアクティベーションを求められる)。
DisplayProgressbar とか言われても GUI が無いので対応できないし、できたとしても Dockerfile で完結できないのでは困る。
軽く調べた感じだとバッチモードからではアクティベーションできないようだ。
これは・・・詰んだ。
5.3系だと動くのか
下記の通り Dockerfile を変更する。
// ENV UNITY_PKG=unity-editor-5.5.0b5+20160927_amd64.deb
ENV UNITY_PKG=unity-editor-5.3.3f1+20160223_amd64.deb
なるほどこれだと確かに動く。まとめ
今は 5.3 系のテスト環境でも特に問題ないのだが、C# 6 に言語バージョンが上がる Unity 5.5 系に載せ替えられなくなってしまう。
最新の Unity で動作しない方法は使えない。
ということで、Unity Editor Tests Runner on Linux on Docker は諦めた。
次回に続く。
コメント
コメントを投稿