Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ゲーム開発におけるクラウドネイティブな CI/CD の最新動向

ゲーム開発におけるクラウドネイティブな CI/CD の最新動向

YAEGASHI Takeshi

November 05, 2021
Tweet

More Decks by YAEGASHI Takeshi

Other Decks in Technology

Transcript

  1. ⾃⼰紹介 ⼋重樫 剛史 Takeshi Yaegashi § 株式会社バンダイナムコスタジオ (BNS) 所属 §

    Linux・Unix・OSS・Go ⾔語が好きなエンジニア § 組み込みシステム開発、ゲームサーバ開発、 開発環境のクラウドシフトなどの業務に従事 主な活動場所 ホームページ・ブログ https://l0w.dev GitHub https://github.com/yaegashi GitLab https://gitlab.com/yaegashi Twitter https://twitter.com/hogegashi
  2. 本⽇の話題の中⼼ § いわゆるゲームクライアント側アプリの CI/CD インフラについて扱います - つまり PC、コンソール、モバイル端末などで動作するアプリ - ゲームサーバ側アプリの

    CI/CD インフラの話はでてきません - メイントピック:Unity・Unreal ⼆⼤ゲームエンジンの CI/CD 事情 § 過去の講演も参照してください - JTF2021W: Azure DevOps で実現する Unity アプリのハイパフォーマンス CI/CD - CEDEC2021: 2020年代のゲーム開発のためのクラウドネイティブCI/CDパイプラインの構築 - CEDIL より資料がダウンロードできます (登録が必要) - CICD2021: ⼤規模ゲーム開発を⽀えるAzure DevOpsによるクラウドネイティブなCI/CDの紹介
  3. ゲーム開発に特有な CI/CD 事情 § プロプラエタリ、クローズドな開発環境 - ターゲットプラットフォーム: Windows, macOS, iOS,

    PS, Xbox, Switch, etc. - ツールチェイン: Visual Studio, Xcode, etc. - ゲームエンジン: Unity, Unreal, etc. - DCCツール: Adobe, Autodesk, etc. - その他、個別に独⾃のEULAやNDAが設定された多数のコンポーネント § クラウドネイティブな CI/CD インフラの実現は難しい… - ⾃分の思い描くシステム構成やクラウドサービスが採⽤できないことはままある - しかしながら、環境の変化、ベンダ・関係者の努⼒により状況が変わってきたものもある
  4. 例:NDA § 厳しいNDAの下で供給されるコンポーネント - 例: コンソールプラットフォームの SDK (PlayStation, Xbox, Switch,

    etc.) - 例: 版権ものの素材、アセット § そもそもクラウドに持っていけないケースが多数 - 古くからの慣習で開発拠点からの持ち出し禁⽌が設定されていることも多い - クラウドに持っていく前に利⽤条件を権利者に確認し、必要なら交渉する - クラウド開発の⼀般化、COVID-19の影響もあって認められやすい?
  5. 例:アクティベーション § 使⽤前にライセンスのアクティベーションが必要な開発ツール - 例:Unity Editor (CI/CDにも使われるUnityの開発ツール) § ノードロックライセンス -

    特定のユーザーやマシンに特定のライセンスを1対1で割り当てるため、 CI/CDのコンテナ化、オートスケールと⾮常に相性が悪い - Unity Editor はかつてこれしか選択肢がなく、ひとつのライセンスを不特定多数の ユーザー・複数のマシンで共⽤する CI/CD インフラは EULA 的にグレーな状態だった § フローティングライセンス - 購⼊した数のライセンスプールを設け、 開発ツールがライセンスの割り当てと返却を⾃動的に⾏う - Unity Editor は2020年よりUnity Build Server製品によってフローティングライセンスが実現 EULA のグレーな部分が解消し、CI/CDインフラの⾃由度が向上した
  6. 例:Apple Xcode/macOS § ゲーム業界に限らずみんな悩んでいる問題 § iPhoneなどAppleデバイス向けアプリのビルドにはXcodeとmacOSが必要 - XcodeはmacOSでしか動かない - macOSはMacハードウェアでしか動かない

    § 価格と柔軟性で満⾜できる Mac のクラウドサービスがない - AWS EC2 の mac1.metal は柔軟性は⼗分だが価格が⾼い - Azure Pipelines や GitHub AcXons などが提供する macOS エージェントの利⽤が現実的 - Xcode Cloud? macOS なしでも使えるなら…
  7. 例:Microsoft Visual Studio § Visual Studio - Windows 向けアプリビルドで必要となる Microsoft

    の開発ツール - CI/CD で利⽤する CLI ツールを集めた Build Tools も含む § Visual Studio サブスクリプション (MSDN) - Visual Studio の⼀般的な商業利⽤向けライセンス - 2019年10⽉よりMS製品の特定クラウドベンダ(Listed Providers)での利⽤に制限がかけられた - Listed Providers: Alibaba, Amazon, Google, Microsoft - VS サブスクリプションも該当、ただし Azure でなら利⽤可能とライセンスに明記されている - 現状では Azure 以外での Visual Studio の CI/CD インフラ構築は⼤きく制限されている - AWS と Microsoft に関するよくある質問
  8. 例:⾃動化・コンテナ化アンフレンドリー § ⾃動化・コンテナ化の配慮に⽋けた開発ツールに苦労する - エンジニア以外も使⽤する GUI の開発ツールに多い - ヘッドレス動作、バッチ処理、CLI 起動などの⾃動化対応が貧弱

    - Automator や RPA のようなデスクトップ⾃動化でしのぐこともある - CI/CD には不要な GUI コンポーネントを含み、コンテナイメージサイズが肥⼤化する - コンテナでの動作確認がなされておらず、コミュニティが頑張っている § 開発ツールのコンテナ化の実現は⾮常に重要 - クラウドネイティブという⽂脈以外でも、その恩恵はとても⼤きい (後述)
  9. Unity/Unreal コンテナサポート状況 § Unity - コミュニティの例: h]ps://game.ci/docs/docker/docker-images - Linux 版

    Unity Editor のコンテナのみ、互換性に不安 - Unity Technologies による公式なコンテナサポートは今のところなし - ただし 2020 年に登場した Unity Build Server ライセンスにより EULA のグレーゾーンは解消 § Unreal - コミュニティの例: h]ps://unrealcontainers.com - Python パッケージ ue4-docker により Dockerfile を⽣成 - Linux だけでなく Windows コンテナもサポート - 2021年8⽉の Unreal Engine 4.27 より Epic Games によるベータサポート開始! - GitHub Container Registry で公式コンテナイメージ配布 (ただしLinux版のみ)
  10. まとめ § ゲーム開発におけるクラウドネイティブ CI/CD の状況 - プロプラエタリ、クローズドな開発環境を扱うことが多い - ⾃動化・コンテナ化サポートが成熟していない開発ツールも多い -

    思い通りの CI/CD インフラが構築できないケースがある § Unity/Unreal ⼆⼤ゲームエンジンの状況 - ベンダやコミュニティの努⼒もあり、コンテナ化サポートの改善が継続的に⾏われている - Unity Build Server 製品によるクラウド CI/CD の EULA グレーゾーン解消 - Unreal Engine 4.27 によるコンテナ化の公式サポート - 今後の展開に期待
  11. Unity/Unreal Windows コンテナの活⽤ § バンダイナムコスタジオ (BNS) における Unity/Unreal 向け CI/CD

    の研究開発 - Azure Pipelines、Azure Image Builder、Azure VMSS を活⽤した仮想マシン中⼼のインフラ - Unity Build Server (フローティングライセンス) の導⼊ - CI/CD Conference 2021 などの登壇を参照 § UE4.27 のリリースと unrealcontainers.com (ue4-docker) がもたらした知⾒により、 Unity/Unreal の実⽤的な Windows コンテナ開発環境が構築できることがわかった - Linux 版開発ツールは互換性の不安があったが Windows 版なら試す価値がある - Windows でも仮想マシンからコンテナに移⾏する恩恵は⼤きい - IaaS 互換性向上、ストレージフットプリント削減 (OCI互換コンテナ) - 構成管理の簡略化・環境構築の時間短縮 (Docker build vs AIB/Packer/Ansible/etc.) - オーケストレーションの選択肢の増加 (Kubernetes など)
  12. Azure DevOps BanaDemo 組織 § BanaDemo: Azure DevOps のデモンストレーション組織 §

    現在 3 つのプロジェクトを公開中 - https://dev.azure.com/banademo/public - https://dev.azure.com/banademo/CNCoUE4 - https://dev.azure.com/banademo/CNCoUnity
  13. Windows コンテナイメージの開発 § Windows コンテナイメージ開発では専⽤ Windows Server VM を⽤意するのが無難 -

    Windows カーネルのバージョンと⼀致するベースイメージを⽤いる必要があり、 最新デスクトップ Windows 10 と Windows Server 2019 では適合しない - 1 台のWindows ホスト上では Linux コンテナと Windows コンテナは同時に使えない Windows コンテナを選択すると WSL が使えなくなる § Azure Marketplace “Windows Server 2019 Datacenter with Containers” の利⽤がおすすめ - Windows コンテナと Docker CLI がセットアップ済みの Azure VM イメージ - 最新の Windows コンテナイメージがプル済み
  14. Azure Pipelines の Windows コンテナサポート § Windows コンテナによる CI/CD は

    Azure Pipelines を使うのが最も簡単 - ジョブ定義の container: にイメージ名を書くだけ - プライベートレジストリを使う場合は endpoint にサービスコネクション名を書く - --storage-opt size=400G で巨⼤なビルドに対応 - コンテナ内で Azure Pipelines の task steps を実⾏ - パイプラインのワークスペースはホスト上にある ホスト C:¥a¥1 → コンテナ C:¥__work¥1 bind mount - $(Pipeline.Workspace) などの⾃動変数も適切に変化 jobs: - job: CNCoUE4EngineBuild timeoutInMinutes: 240 pool: name: cncoue41 container: endpoint: cncoue4 image: cncoue4.azurecr.io/ue4prereq options: --storage-opt size=400G steps: - powershell: ...
  15. Windows コンテナ対応 Azure Pipelines エージェント § MS hosted - windows-2019

    などの標準 Windows イメージで Windows コンテナが利⽤可能 - 固定スペック CPU2コア・メモリ7GB - コンテナイメージやワークスペースがキャッシュできず、毎回取得に時間がかかる § Self hosted - 任意のスペックの Windows マシンが使⽤可能 - マシンにコンテナイメージとワークスペースが残留するのでジョブ起動を速くできる! - Azure VM の場合 Marketplace の “Windows Server 2019 Datacenter with Containers” でよい → ⾯倒な VM イメージのビルドが不要! - Azure 仮想マシンスケールセット (VMSS) の利⽤でオートスケールも可能!
  16. Windows コンテナ CI/CD プロジェクト § プロジェクトごとに次のリソースを⽤意する - Azure Repos →

    Git リポジトリ - Azure Pipelines → CI/CD パイプライン - 仮想マシンスケールセット (VMSS) → Azure Pipelines エージェントのオートスケール - Azure Container Registry → 開発ツールコンテナイメージを格納 - ストレージアカウント → 成果物の配布
  17. Unity: Windows コンテナイメージ概要 § コンテナイメージ https://dev.azure.com/banademo/CNCoUnity/_git/CNCoUnity - unitybase:latest - Unity

    Hub および各種ツール・ランタイムをインストール - unityeditor:2020.3.21f1-win64, -android, -ios, -webgl など - 指定したバージョンおよびモジュールの Unity Editor をインストール PS C:¥git¥CNCoUnity> docker images REPOSITORY TAG IMAGE ID CREATED SIZE mcr.microsoft.com/windows/servercore ltsc2019 4abfec8815bc 4 weeks ago 5.7GB cncounity.azurecr.io/unitybase latest 5c1f21da2e98 33 hours ago 7.41GB cncounity.azurecr.io/unityeditor 2020.3.21f1-webgl a31b1fbd7809 3 hours ago 14.5GB cncounity.azurecr.io/unityeditor 2020.3.21f1-win64 631f8660e6af 4 hours ago 13.3GB cncounity.azurecr.io/unityeditor 2020.3.21f1-android 50020817f252 4 hours ago 18.5GB cncounity.azurecr.io/unityeditor 2020.3.21f1-ios 9752b7762448 4 hours ago 14.9GB
  18. Unity: Windows コンテナによるアプリビルド § サンプルプロジェクト Kar)ngMicrogame h`ps://dev.azure.com/banademo/CNCoUnity/_git/CNCoUnityKar)ngMicrogame § unityeditor イメージの中で通常どおりビルドする

    - Azure VMSS 起動時間 4 分、unityeditor:2020.3.21f1-win64 プル所要時間 5 分 (初回のみ) - Unity Build Server ライセンスサーバに SSH トンネル経由で接続 - コンテナのおかげで、VM で複数同時ビルドしても SSHトンネルのポートが競合しない! - コンテナ化によるビルド速度の劣化はなし - ビルド成果物は Azure Blob Storage にアップロード
  19. Unreal: Windows コンテナイメージ概要 § コンテナイメージ h`ps://dev.azure.com/banademo/CNCoUE4/_git/CNCoUE4 - ue4prereq:latest - ue4-docker

    が出⼒する ue4-build-prerequisites コンテナを元に作成 - Visual Studio 2019 Build Tools および各種ツール・ランタイムをインストール - ue4engine:4.27.1-release - C:¥Unrea¥UE4 に指定した Git ref の UE4 エンジン Installed Build を配置したイメージ PS C:¥git¥CNCoUE4> docker images REPOSITORY TAG IMAGE ID CREATED SIZE mcr.microsoft.com/windows/servercore ltsc2019 4abfec8815bc 4 weeks ago 5.7GB cncoue4.azurecr.io/ue4prereq latest e0a4b00e1d9a 32 hours ago 15.6GB cncoue4.azurecr.io/ue4engine 4.27.1-release f91da15af911 21 hours ago 27.7GB
  20. Unreal: Windows コンテナによるアプリビルド § サンプルプロジェクト ShooterGame h`ps://dev.azure.com/banademo/CNCoUE4/_git/CNCoUE4ShooterGame § ue4engine イメージの中で

    VM の場合と同様にビルドする - Azure VMSS 起動時間 4 分、ue4engine:4.27.1-release プル所要時間 10 分 (初回のみ) - コンテナ内で SMB3 ファイル共有に接続可能 - Azure Files ボリュームをマウントして共有 DDC として活⽤ - コンテナ化によるビルド速度の劣化はなし - ビルド成果物は Azure Blob Storage にアップロード
  21. まとめ § 次のお話をしました - ゲーム開発におけるクラウドネイティブ CI/CD 実現について - Unity/Unreal ⼆⼤ゲームエンジンの

    CI/CD インフラの改善状況 - UE4.27 と ue4-docker に触発されて構築した Windows コンテナ開発環境の紹介 - Azure DevOps BanaDemo 組織 https://dev.azure.com/banademo/public § 引き続き優れた CI/CD インフラの実現に取り組んでいきたいと思います