【Unity】GameCIでタグに存在しないバージョンのUnityのDockerイメージをビルドする
はじめに
本記事は、Unity Advent Calendar 2024 21日目の記事になります。 検証環境は以下になります。バージョンが違う場合には動作しない場合がありますので、ご留意ください。
- game-ci/docker 3.11
GameCI
GameCIはUnityのクラウド上での実行環境を提供してくれるライブラリです。 Docker環境で動くUnityの実行環境を公開し、それらがGitHub ActionsなどのCI環境で手軽に使えるような機能も提供してくれています。
GameCIの存在によって、Unityのビルド職人たちはクラウドビルドにおいて任意のUnityのビルド環境を手軽に使えます。とても便利なライブラリです。
存在しないバージョンのUnityのDocker イメージをビルドする
Docker イメージは各種プラットフォームやUnityのバージョンごとにtagが公開されています。公式サイトやDocker Hubで一覧表示と検索ができます。
しかし、完全に網羅されているわけではなく、特定のパッチバージョンやプラットフォームの組み合わせではDocker イメージが存在しないこともあります。 そういったケースでは自前のビルドが必要です。GitHub上でDockerfileが公開されているため、これを利用します。
バージョンやChangeset、必要なモジュールを引数に指定し、Unity Hubでのインストールを行っています。
# Install editor
ARG version
ARG changeSet
RUN unity-hub install --version "$version" --changeset "$changeSet" | tee /var/log/install-editor.log && grep 'Failed to install\|Error while installing an editor\|Completed with errors' /var/log/install-editor.log | exit $(wc -l)
# Install modules for that editor
ARG module="non-existent-module"
RUN for mod in $module; do \
if [ "$mod" = "base" ] ; then \
echo "running default modules for this baseOs"; \
else \
unity-hub install-modules --version "$version" --module "$mod" --childModules | tee /var/log/install-module-${mod}.log && grep 'Missing module\|Completed with errors' /var/log/install-module-${mod}.log | exit $(wc -l); \
fi \
done \
# Set execute permissions for modules
&& chmod -R 755 /opt/unity/editors/$version/Editor/Data/PlaybackEngines
Dockerfileはそれぞれプラットフォームごとに分かれ、images配下にそれぞれ置かれています。
今回は例として、windows/editorかつIL2CPPビルドを行うためのDockerfileをビルドするスクリプトを示します。
# バージョンとチェンジセット
UNITY_VERSION="2022.X.XXX"
UNITY_CHANGESET="hogehogehoge"
UNITY_MODULE="windows-il2cpp"
docker build \
--build-arg version=${UNITY_VERSION} \
--build-arg changeSet=${UNITY_CHANGESET} \
--build-arg module=${UNITY_MODULE} \
-t custom-windows-il2cpp \
https://github.com/game-ci/docker.git#main:images/windows/editor
紹介したケースは存在しないUnityバージョンのDocker イメージを生成することでしたが、すでに存在するDocker イメージをベースとしてカスタムビルドすることももちろん可能です。これについては公式ドキュメントでも紹介されていますので、参考にしてください。
本記事が少しでもみなさまのUnity CI生活に役立つことを祈っています。
おまけ: UnityのChangesetがわからない場合
UnityのChangesetは公式のリリースノートの下の方に書いてあったりします。

mob-sakaiさんが自動で検索するツールを作っていたりするので、これを利用すると便利です。 github.com
(公式でもっと取得しやすいようにしてほしい)