GCP でもできる!簡単 IncrediBuild Helper 構築
この記事は Google Cloud Japan Customer Engineer Advent Calendar 2020 の 9 日目の記事です。
ゲーム業界のお客様に多くご利用いただいている、ビルド高速化ソリューションに IncrediBuild があります。
IncrediBuild はビルド処理をネットワーク内のマシンに並列に分散して高速化する仕組みですので、必要なときに素早くコンピュートリソースを用意できるクラウドとの相性がとても良いものであると考えています。
実際に IncrediBuild には IncrediBuild Cloud というサービスがあり、クラウドとネイティブなインテグレーションが可能となっています。
。。。なのですが、この IncrediBuild Cloud 非常に残念なことに GCP に対応していません。
していないのですが、GCP が持っている機能 / サービスを活用することで、少しの設定で GCP でも簡単に IncrediBuild の分散ビルド環境を構築することができます!
簡単に環境構築ができることを実感いただけるよう、デモ動画を作ってみましたので、まずはこちらをご覧ください。
動画のとおり gcloud コマンドを 1 つ実行するだけで、GCE インスタンスの作成、IncrediBuild エージェント(Helper) のインストール、Coordinator への接続まで行うことができます!
ここからはその仕組みと実際の設定を解説していきたいと思います。
GCE で IncrediBuild Helper インスタンスを自動セットアップ
まず gcloud コマンドで GCE インスタンスを作成します。
この時インスタンスメタデータに以下の値を設定しています。
- GCE Startup Script の URI
- IncrediBuild silent installer の URI
- 接続する IncrediBuild Coordinator の IP アドレス
(IncrediBuild のSilent installer と GCE Startup Script はあらかじめ GCS に保存しておきます。)
具体的な gcloud コマンドの例は以下のような感じです。
gcloud compute instances create ib-helper-01 ib-helper-02 ib-helper-03 ib-helper-04 \
--machine-type n1-standard-4 \
--image-project windows-cloud \
--image-family windows-2016 \
--zone asia-northeast1-b \
--scopes cloud-platform \
--metadata \
agent-installer-uri=gs://<インストーラー(IBSetupConsole.exe)の GCS URI>,\
coordinator-name=<Coordinator の IP アドレス>,\
windows-startup-script-url=gs://<Startup script(setup-agent.ps1)の GCS URI>
作成された GCE インスタンスでメタデータに設定した Startup Script が実行されます。
Startup Script では、まずメタデータに設定した IncrediBuild の Silent installer の URI とセットアップした Helper が接続する Coordinator の IP アドレスを取得します。
取得した Silent installer の URI からインストーラーをダウンロードします。
Startup Script からダウンロードした Silent installer を実行します。
IncrediBuild Agent のインストールと Coordinator への接続が行われ、自動セットアップは完了です!
Startup Script (setup-agent.ps1) は以下のような感じになります。
# Get IncrediBuild silent installer URI, Coordinator name and instance name from instance metadata.
$agentInstallerUri = Invoke-RestMethod -Headers @{'Metadata-Flavor'='Google'} -Uri 'http://metadata.google.internal/computeMetadata/v1/instance/attributes/agent-installer-uri'
$coordinatorName = Invoke-RestMethod -Headers @{'Metadata-Flavor'='Google'} -Uri 'http://metadata.google.internal/computeMetadata/v1/instance/attributes/coordinator-name'
$instanceName = Invoke-RestMethod -Headers @{'Metadata-Flavor'='Google'} -Uri 'http://metadata.google.internal/computeMetadata/v1/instance/name'# Retrieve zone name
$zoneString = Invoke-RestMethod -Headers @{'Metadata-Flavor'='Google'} -Uri 'http://metadata.google.internal/computeMetadata/v1/instance/zone'
$zoneStringArray = $zoneString.Split("/")
$zoneName = $zoneStringArray[3]# Get IncrediBuild silent installer from GCS.
gsutil cp $agentInstallerUri C:\IBSetupConsole.exe# Execute IncrediBuild silent installer.
C:\IBSetupConsole.exe /Install /Components=Agent /Coordinator=$coordinatorName /AGENT:INSTALLADDINS=OFF# Remove startup script from instance metadata.
gcloud compute instances remove-metadata $instanceName --keys windows-startup-script-url --zone $zoneName
おわりに
記事にしてみると冗長にみえますが、実際には非常に簡単な仕組みでできています。
GCE には非常に高速にインスタンスを作成できるというメリットがあります。ですので、GCE をご利用いただくことで、分散ビルド中のコンピュートリソースの追加を更に迅速柔軟に行っていただけると考えています。
IncrediBuild の分散ビルド環境を構築される際はぜひ GCP もご検討いただければと思います!