Gitlab CIでUnity3dプロジェクトの自動アセンブリを構成する

更新02.17.2019-この記事は古くなっています。 2019年に使用する価値はありません。



プロジェクトの自動アセンブリが必要な理由、誰も説明する必要はありません。

Unity向けのプロジェクトを構築する場合、これは特に当てはまります。たとえば、WebGLの下の平凡なプロジェクトは、作業マシンで5〜7分間組み立てられ、完全にハングアップするためです。



Linux向けのUnityバージョンがリリースされたのはそれほど前のことではなく、原則としてGitlab CI(dockerイメージに基づく)を使用して自動アセンブリを構成することができました。



このセットアップでの経験を共有したいと思います。



パート1-Unityでドッカー画像を収集する



Unityを含むdockerイメージが必要です。



以下に、完成したdockerファイルを添付します。

しかし、最初に、いくつかのコメントから、ドッカーファイルでgnomeやtightvncserverなどの異国情緒が明らかになります。



そのため、ユニットで「額」にドッカーイメージを使用する場合の主な問題は、インストール後のユニットで手動によるアクティベーションが必要になることです。 さらに、アクティベーションはグラフィカルモードでのみ機能します。 幸いなことに、これを行う必要があるのは一度だけです。



したがって、計画は次のとおりです。





以下は私のdockerファイルです。 彼はunity5.6の画像を収集します

Unityのバージョンを新しいバージョンに変更することはありません。このバージョンですべてを確認したからです。

しかし、あなたは交換してみることができます

beta.unity3d.com/download/6a86e542cf5c/unity-editor_amd64-5.6.1xf1Linux.deb

別のバージョンに。



現在のリストはここにあります



Dockerfile
FROM ubuntu:16.04 RUN apt-get update -qq RUN env DEBIAN_FRONTEND=noninteractive apt-get -qq install -y ffmpeg ubuntu-desktop gnome-panel gnome-settings-daemon metacity nautilus gnome-terminal --no-install-recommends 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 git vim xrdp tightvncserver \ && rm -rf /var/lib/apt/lists/* && apt-get purge RUN echo "Downloading Unity3D installer...." \ && mkdir /app \ && curl -o /app/unity_editor.deb "http://beta.unity3d.com/download/6a86e542cf5c/unity-editor_amd64-5.6.1xf1Linux.deb" \ && echo "Unity3D installer downloaded." \ # To make a "min" version of this image build, omit this dpkg line. It saves a lot of space, but you'll need to dpkg it yourself when you use the image. && dpkg -i /app/unity_editor.deb && ln -s /opt/Unity/Editor/Unity /usr/local/bin/unity && rm -rf /app RUN mkdir -p .vnc .cache/unity3d .local/share/unity3d ENV USER root ADD xstartup /root/.vnc/xstartup COPY runUnity.sh /root RUN chmod 755 /root/.vnc/xstartup && chmod 755 /root/runUnity.sh && sed -i -e 's/\r//g' /root/.vnc/xstartup && sed -i -e 's/\r//g' /root/runUnity.sh # VNC EXPOSE 5901 ENTRYPOINT ["bash"]
      
      





そして、このdockerfileで使用される2つのスクリプトは次のとおりです。



xstartup
 #!/bin/sh export XKL_XMODMAP_DISABLE=1 unset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS [ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources xsetroot -solid grey vncconfig -iconic & gnome-panel & gnome-settings-daemon & metacity & nautilus & gnome-terminal &
      
      







runUnity.sh
 #!/bin/sh xvfb-run --server-args="-screen 0 1024x768x24" /opt/Unity/Editor/Unity -batchmode -logfile -force-opengl -quit -projectPath /project -executeMethod WebGLBuilder.build
      
      





ステップ1



これら3つのファイルを1つのディレクトリに配置します。



ステップ2



dockerで画像を収集します(Unityの非アクティブなコピーが含まれます)

私はこれが好きでした:



 docker build -t softaria/unity3d .
      
      





ステップ3



このイメージからコンテナーを実行します。



 docker run --privileged --cap-add=SYS_ADMIN -ti -p "5901:5901" --entrypoint=bash softaria/unity3d
      
      





VNCサーバーに到達するためのポートが必要です。



なぜ特権が必要なのかは覚えていませんが、特権なしでは機能しません。 エントリポイントには、bashを指定して、実行中のコンテナにすぐに入れます。



ステップ4



次に、コンテナ内でvncサーバーを起動する必要があります。



 vncserver :1
      
      





パスワードを要求します。 わかりました-思いつきます。







スクリーンショットでわかるように、サーバーはログファイルへのパスを書き込みます。

このログを調べて、gnomeが起動したことを確認できます(ただし、確認することもできません)。



ステップ5



次に、VNCクライアントが必要です。 どれでも。

たとえば、これ



たとえば、次のようにサーバーにアクセスします(IP +ポートを指定する必要があります)。



123.123.133.123:5901



ポートは正確に5901です。しかし、IPはあなたのものです。



ステップ6



gnomeからUnityメニューを起動します

ログインしてライセンスをアクティブ化します。







おでかけ



ステップ7



vncserverを停止します(当然、ドッカーコンテナー内-起動された場所と同じ場所)



 vncserver -kill :1
      
      





これは、Unityをあらゆる種類の不要なジャンクでアクティブにして、将来のイメージを乱さないようにする価値があります。



ステップ8



Dockerコンテナが実行されているマシンで、別のターミナルを開きます。 作業コンテナから新しいdockerイメージを保存する必要があります。



これを行うには、コンテナを離れることなく、別のターミナルで、docker psを起動し、このコンテナのIDをコピーするだけでこのコンテナを見つけます。



次に、コンテナを新しいイメージに保存します。



 docker commit {-} softaria/unity3d:licensed
      
      





これで、Unityがアクティブ化されたdockerイメージができました。

レジストリに入力できます。



画像を確認



この手順の後、gitlabの外部で画像の状態を確認する価値があります。



次の方法で実行できます。



/ root / myProjectにプロジェクトのソースを含めて、コンパイルする必要があります。

プロジェクトソースのコマンドラインからビルドするには、アセンブリを構成する特別なクラスを配置する必要があることを知っています(または今すぐわかります)。



Assets / Editorに配置します



そして、クラスとそのメソッドは、以下の私の例のように正確に呼び出す必要があります(これらの名前はrunUnity.shスクリプトで言及されているためです。覚えておいてください:“ -executeMethod WebGLBuilder.build”?)



 public class WebGLBuilder { static void build() { //        string[] scenes = { "Assets/main.unity" }; //  —       ,  —   (   WebGL,   None) BuildPipeline.BuildPlayer(scenes, "WebGL-Dist", BuildTarget.WebGL, BuildOptions.None); } }
      
      





次に、次のように画像からコンテナを実行します。



 docker run --privileged --cap-add=SYS_ADMIN -v "/root/myProject:/project" softaria/unity3d:licensed /root/runUnity.sh
      
      





そして、アセンブリが機能することを確認してください。



アセンブリが機能した場合、次の項目に進みます。



パート2 Gitlab.CIでプロジェクトをビルドする



以下に、.gitlab-ci.ymlを示します



しかし、最初にいくつかのコメントがあります-なぜ彼はそんなにい非自明なのですか。



収集したばかりのイメージに基づいてビルドしようとしています(softaria / unity3d:licenced)

失敗-エラーが発生しました「/ usr / bin / sh:/ usr / bin / sh:バイナリファイルgitlabを実行できません」

その正確な理由は覚えていませんが、標準の画像であるdockerを使用して、その中で画像を実行するシンプルで実用的なソリューションであることがわかりました。



2番目の問題は、ボリュームを使用してUnityでコンテナ内のソースコードを転送できないことでした。 hitlab内では、ボリュームが機能しませんでした。 おそらく何らかの回避策があるかもしれませんが、ユニットからコンテナー内のソースをコピーし、結果を取り戻すのが簡単だと理解するには遅すぎました



私はこれらのソリューションをエレガントに見せかけたわけではありませんが、ここにいます
アセンブリの作業バージョン:
 stages: - build build: image: docker stage: build before_script: #     - docker login -u $CI_REGISTRY_USER -p $CI_BUILD_TOKEN $CI_REGISTRY script: #     - docker pull docker.softaria.com/games/unity:licensed #   ,      - docker create --name ${CI_BUILD_REF}_lines --privileged --cap-add=SYS_ADMIN --entrypoint=bash docker.softaria.com/games/unity:licensed /root/runUnity.sh #     - docker cp $(pwd) ${CI_BUILD_REF}_lines:/project #  - docker start -a -i ${CI_BUILD_REF}_lines #      - rm -rf nginx/client #       - docker cp ${CI_BUILD_REF}_lines:/project/WebGL-Dist/ nginx/client/ #       —         nginx,             .      (     )    - . - docker build -t $CI_REGISTRY_IMAGE --build-arg build_name=$CI_PIPELINE_ID nginx - docker push $CI_REGISTRY_IMAGE after_script: - docker rm ${CI_BUILD_REF}_lines - docker logout $CI_REGISTRY tags: - docker artifacts: name: "${CI_BUILD_REF_NAME}_${CI_BUILD_REF}" expire_in: 2 weeks paths: - nginx/client only: - master
      
      





以上です。 質問がある場合は、コメントに答えてみます。



2017年9月25日からの更新-ユニティイメージのアセンブリにffmpegを追加しました。 それなしでは、ゲームの音は行きません。




All Articles