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. ゲーム開発における
    クラウドネイティブな CI/CD の最新動向
    Cloud Na)ve Days Tokyo 2021
    株式会社バンダイナムコスタジオ
    ⼋重樫 剛史 Takeshi Yaegashi

    View Slide

  2. ⾃⼰紹介
    ⼋重樫 剛史 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

    View Slide

  3. アジェンダ
    § ゲーム開発におけるクラウドネイティブな CI/CD の状況
    § Unity/Unreal における Windows コンテナの活⽤研究
    § Azure DevOps デモプロジェクトの紹介

    View Slide

  4. 本⽇の話題の中⼼
    § いわゆるゲームクライアント側アプリの 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の紹介

    View Slide

  5. ゲーム開発における
    クラウドネイティブな CI/CD の状況

    View Slide

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

    View Slide

  7. 例:NDA
    § 厳しいNDAの下で供給されるコンポーネント
    - 例: コンソールプラットフォームの SDK (PlayStation, Xbox, Switch, etc.)
    - 例: 版権ものの素材、アセット
    § そもそもクラウドに持っていけないケースが多数
    - 古くからの慣習で開発拠点からの持ち出し禁⽌が設定されていることも多い
    - クラウドに持っていく前に利⽤条件を権利者に確認し、必要なら交渉する
    - クラウド開発の⼀般化、COVID-19の影響もあって認められやすい?

    View Slide

  8. 例:アクティベーション
    § 使⽤前にライセンスのアクティベーションが必要な開発ツール
    - 例:Unity Editor (CI/CDにも使われるUnityの開発ツール)
    § ノードロックライセンス
    - 特定のユーザーやマシンに特定のライセンスを1対1で割り当てるため、
    CI/CDのコンテナ化、オートスケールと⾮常に相性が悪い
    - Unity Editor はかつてこれしか選択肢がなく、ひとつのライセンスを不特定多数の
    ユーザー・複数のマシンで共⽤する CI/CD インフラは EULA 的にグレーな状態だった
    § フローティングライセンス
    - 購⼊した数のライセンスプールを設け、
    開発ツールがライセンスの割り当てと返却を⾃動的に⾏う
    - Unity Editor は2020年よりUnity Build Server製品によってフローティングライセンスが実現
    EULA のグレーな部分が解消し、CI/CDインフラの⾃由度が向上した

    View Slide

  9. 例:Apple Xcode/macOS
    § ゲーム業界に限らずみんな悩んでいる問題
    § iPhoneなどAppleデバイス向けアプリのビルドにはXcodeとmacOSが必要
    - XcodeはmacOSでしか動かない
    - macOSはMacハードウェアでしか動かない
    § 価格と柔軟性で満⾜できる Mac のクラウドサービスがない
    - AWS EC2 の mac1.metal は柔軟性は⼗分だが価格が⾼い
    - Azure Pipelines や GitHub AcXons などが提供する macOS エージェントの利⽤が現実的
    - Xcode Cloud? macOS なしでも使えるなら…

    View Slide

  10. 例: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 に関するよくある質問

    View Slide

  11. 例:⾃動化・コンテナ化アンフレンドリー
    § ⾃動化・コンテナ化の配慮に⽋けた開発ツールに苦労する
    - エンジニア以外も使⽤する GUI の開発ツールに多い
    - ヘッドレス動作、バッチ処理、CLI 起動などの⾃動化対応が貧弱
    - Automator や RPA のようなデスクトップ⾃動化でしのぐこともある
    - CI/CD には不要な GUI コンポーネントを含み、コンテナイメージサイズが肥⼤化する
    - コンテナでの動作確認がなされておらず、コミュニティが頑張っている
    § 開発ツールのコンテナ化の実現は⾮常に重要
    - クラウドネイティブという⽂脈以外でも、その恩恵はとても⼤きい (後述)

    View Slide

  12. 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版のみ)

    View Slide

  13. まとめ
    § ゲーム開発におけるクラウドネイティブ CI/CD の状況
    - プロプラエタリ、クローズドな開発環境を扱うことが多い
    - ⾃動化・コンテナ化サポートが成熟していない開発ツールも多い
    - 思い通りの CI/CD インフラが構築できないケースがある
    § Unity/Unreal ⼆⼤ゲームエンジンの状況
    - ベンダやコミュニティの努⼒もあり、コンテナ化サポートの改善が継続的に⾏われている
    - Unity Build Server 製品によるクラウド CI/CD の EULA グレーゾーン解消
    - Unreal Engine 4.27 によるコンテナ化の公式サポート
    - 今後の展開に期待

    View Slide

  14. Unity/Unreal における
    Windows コンテナの活⽤研究

    View Slide

  15. 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 など)

    View Slide

  16. 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

    View Slide

  17. 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 コンテナイメージがプル済み

    View Slide

  18. 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: ...

    View Slide

  19. 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) の利⽤でオートスケールも可能!

    View Slide

  20. Windows コンテナ CI/CD プロジェクト
    § プロジェクトごとに次のリソースを⽤意する
    - Azure Repos → Git リポジトリ
    - Azure Pipelines → CI/CD パイプライン
    - 仮想マシンスケールセット (VMSS) → Azure Pipelines エージェントのオートスケール
    - Azure Container Registry → 開発ツールコンテナイメージを格納
    - ストレージアカウント → 成果物の配布

    View Slide

  21. 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

    View Slide

  22. 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 にアップロード

    View Slide

  23. 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

    View Slide

  24. 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 にアップロード

    View Slide

  25. まとめ

    View Slide

  26. まとめ
    § 次のお話をしました
    - ゲーム開発におけるクラウドネイティブ CI/CD 実現について
    - Unity/Unreal ⼆⼤ゲームエンジンの CI/CD インフラの改善状況
    - UE4.27 と ue4-docker に触発されて構築した Windows コンテナ開発環境の紹介
    - Azure DevOps BanaDemo 組織 https://dev.azure.com/banademo/public
    § 引き続き優れた CI/CD インフラの実現に取り組んでいきたいと思います

    View Slide

  27. おわり

    View Slide