GitLab CIでUnityスクリプトのユニットテストがしたかった話 (1)


作成中のUnityエディタ拡張のコード規模が徐々に大きくなってきて、まれにデグレが発生するようになってしまった。
私はプロジェクトの隅々まで超人的な気配りができるスーパーエンジニアにはなれなかったので、自動でユニットテストが実行される環境が無いとこのままでは精神の安定が保てない。


開発環境


プロジェクトの開発環境は下記の通り
  • OS: Windows 8.1 x64 Pro
  • Unity: 5.4.1f Pro
  • IDE: Visual Studio: 2015 Pro
  • 言語: C#
  • レポジトリ: GitLab
Editor Tests Runner での GUI 上でのテスト実行は既に行っており、今回はそれを自動化するのが目的だ。

ソースコードは 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 は諦めた。

次回に続く

コメント

このブログの人気の投稿

Lumia 920買った - LTE有効化と開発端末登録

Android で Unicode絵文字入力

Nexus 5 買った