ゲームデプロイの自動化
こんにちは
この前、ハバネロのゲームをデプロイする作業を
自動化するスクリプトを作成しましたので、
その内容をブログに記録しておきます。
ハバネロのゲームページはこういう構造になっています。
それで、ゲーム更新は下のプロセスを行います。
この中で、UnityのWebGLビルドは結構時間がかかるので
デプロイ作業だけで、かなり時間が取られました。
従って、ゲームのデプロイ作業の一連を順次で行う
スクリプトを作りました。
Unityはコマンドラインビルドをサポートしています。
コマンドラインビルドのため、下のような
static Classを用意します。
public static class BuildScript
{
// 実行する関数(staticで定義)
static void BuildWeb()
{
...
string outputPath = Application.dataPath +
"/../../" + "output";
BuildTarget buildTarget = BuildTarget.WebGL;
BuildOptions buildOptions = BuildOptions.None;
//ビルド実行
var result =
BuildPipeline.BuildPlayer(EditorBuildSettings.scenes, outputPath,
buildTarget, buildOptions);
...
}
// ビルドが成功すると実行されます。
[PostProcessBuild(1)]
public static void OnPostprocessBuild(BuildTarget target,
string pathToBuiltProject)
{
...
}
}
ビルド前後の処理(バージョン設定、デバッグ環境変数の
無効化など)も、このクラスで対応します。
static 関数を定義し、コマンドラインで
関数を呼び出します。
${UNITY_PATH} -quit -batchmode -projectPath ${LOCAL_GAME_PATH}
-executeMethod BuildScript.BuildWeb -logFile
ビルドが終わったら、指定したパスにバイナリーが
生成されます。
(WebGLの場合、jsファイルとhtmlファイル生成)
Google Cloud SDKのgsutil を使って
Google Storageにアップロードします。
echo "uploading to S3"
gsutil cp ./index.html ${STORAGE_PATH}/index.html
gsutil cp -r ${LOCAL_OUTPUT_PATH}/Build ${STORAGE_PATH}
GCPコンソールで生成したBucketにゲームファイルを
アップロードします。
ストラージ住所:gs://Bucket名
URL:https://storage.googleapis.com/Bucket名
上記のコマンドを実行すると、Bucketにファイルが
アップロードされます。
ハバネロポータルはWebでゲームを起動させるためのURLを
Google Firestore DBから読み込みします。
先ほどアップロードしたゲームファイルのURLを
DBに更新します。
ここは簡単なPythonスクリプトを使います。
まずPython用Google Cloud SDKを設置します。
> pip install --upgrade google-cloud-firestore
Google SDKが使えるようになったら
以下のスクリプトでDBを更新します。
import sys
from google.cloud import firestore
...
db = firestore.Client()
doc_ref = db.collection(u'games').document(sys.argv[1])
doc_ref.update({u'client_url': url})
スクリプトを実行すると、games DBの client_url が
更新された事をGCPコンソールで確認できます。
client_urlフィールドが更新されました。
一連の作業が終わってハバネロに接続すると
更新されたゲームが起動されます。
ゲームが最新バージョンに変わりました。
これで、コマンド実行で簡単にゲームデプロイが
できるようになりました!
Unityコマンドビルドの問題は
Unity起動中にコマンドビルドができない事です。
つまり、デプロイ作業が行う時は必ず
作業中のUnityを終了しないといけないです。
(いつかUnityプランをアップグレードしたら
Unity Cloud Buildを利用してみたいです。)
他には、別途のビルドマシンを用意する方法もあります。
コメント
コメントを投稿