うどんてっくメモ

技術的なメモをまったりと

【Unity】GameCIでタグに存在しないバージョンのUnityのDockerイメージをビルドする

はじめに

本記事は、Unity Advent Calendar 2024 21日目の記事になります。 検証環境は以下になります。バージョンが違う場合には動作しない場合がありますので、ご留意ください。

  • game-ci/docker 3.11

GameCI

game.ci

GameCIはUnityのクラウド上での実行環境を提供してくれるライブラリです。 Docker環境で動くUnityの実行環境を公開し、それらがGitHub ActionsなどのCI環境で手軽に使えるような機能も提供してくれています。

GameCIの存在によって、Unityのビルド職人たちはクラウドビルドにおいて任意のUnityのビルド環境を手軽に使えます。とても便利なライブラリです。

存在しないバージョンのUnityのDocker イメージをビルドする

Docker イメージは各種プラットフォームやUnityのバージョンごとにtagが公開されています。公式サイトやDocker Hubで一覧表示と検索ができます。

game.ci

Docker Hub

しかし、完全に網羅されているわけではなく、特定のパッチバージョンやプラットフォームの組み合わせではDocker イメージが存在しないこともあります。 そういったケースでは自前のビルドが必要です。GitHub上でDockerfileが公開されているため、これを利用します。

バージョンやChangeset、必要なモジュールを引数に指定し、Unity Hubでのインストールを行っています。

github.com

# 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 イメージをベースとしてカスタムビルドすることももちろん可能です。これについては公式ドキュメントでも紹介されていますので、参考にしてください。

game.ci

本記事が少しでもみなさまのUnity CI生活に役立つことを祈っています。

おまけ: UnityのChangesetがわからない場合

UnityのChangesetは公式のリリースノートの下の方に書いてあったりします。

mob-sakaiさんが自動で検索するツールを作っていたりするので、これを利用すると便利です。 github.com

(公式でもっと取得しやすいようにしてほしい)