Save 37% off PRO during our Black Friday Sale! »

Azure DevOps で実現する Unity アプリのハイパフォーマンス CI/CD

Azure DevOps で実現する Unity アプリのハイパフォーマンス CI/CD

5b47136bedcba2799edf4fcd27ea66d7?s=128

YAEGASHI Takeshi

January 24, 2021
Tweet

Transcript

  1. Azure DevOps で実現する Unity アプリのハイパフォーマンス CI/CD 株式会社バンダイナムコスタジオ ⼋重樫 剛史 Takeshi

    Yaegashi
  2. ⾃⼰紹介 ⼋重樫 剛史 Takeshi Yaegashi § 株式会社バンダイナムコスタジオ所属 § Linux・Unix・OSS・Go ⾔語が好きなエンジニア

    § 組み込みシステム開発、ゲームサーバ開発、 開発環境のクラウドシフトなどの業務に従事 § July Tech Festa 登壇は 2 回⽬ 主な活動場所 ホームページ・ブログ https://l0w.dev GitHub https://github.com/yaegashi GitLab https://gitlab.com/yaegashi Twitter https://twitter.com/hogegashi
  3. #推しテク総選挙 § Android/iOS Unity アプリ CI/CD のクラウドシフトについてお話します § 推しテクキーワード -

    Unity Build Server - Azure DevOps - Azure Pipelines - Azure Virtual Machine Scale Set - Visual Studio App Center - Azure Image Builder - Customazed CLI
  4. Unity アプリ CI/CD のクラウドシフト バンダイナムコスタジオにおける取り組みの紹介

  5. バンダイナムコスタジオにおける Unity § 様々なマーケット・プラットフォーム向け製品で採⽤される重要なミドルウェア - モバイル→ Android・iOS デバイス - 家庭⽤

    → コンソール・PC - 業務⽤ → VR アトラクション・アミューズメント施設 - この講演では、主にモバイル向けアプリの事例を扱います § 数百の Unity Editor ライセンスを購⼊・管理 - 少なからぬ数が CI/CD のビルドサーバに使われている - ライセンス管理の効率化、コスト削減は組織として重要な課題のひとつ
  6. バンダイナムコスタジオにおける COVID-19 § 2020年4⽉以降、ほとんどの従業員は在宅勤務となり、社屋には⼈がいなくなった - ⻑期化に伴い、グループ企業全体で事業拠点統廃合が計画されている - バンダイナムコスタジオでも、サーバなどの機材を削減するため、リポジトリやビルドな どの役割をオンプレミスからクラウドに移⾏させる動きが加速 §

    バンダイナムコスタジオの Unity アプリ開発体制の変化 - 従業員は在宅で Unity Editor などを使⽤し VPN により社屋内のサーバに接続 - CI/CD は変わらずオンプレミスの⼤量の機材を使⽤ (ほとんどが Mac) - VPN の不便さ、機材管理の困難さなどの様々な問題 → オンプレミスに依存しないクラウドで完結する開発体制の確⽴が急務
  7. 従来の Unity アプリ CI/CD パイプライン

  8. 社屋内で稼働する Unity アプリのビルドサーバ Mac mini 全部盛り 302,800円(税別)

  9. クラウドシフトした Unity アプリ CI/CD パイプライン

  10. Unity アプリ CI/CD クラウドシフトの課題解決 § 性能向上を狙いつつ、リーズナブルなコストに抑えることを⽬標として、 2020年10⽉ごろより様々な課題解決に取り組んだ - 開発ツール (Unity

    Editor) のクラウドビルドに対応したライセンスの導⼊ - Jenkins CI からの脱却、マネージド CI サービスの活⽤ - ビルドマシン (Azure VM) オートスケールによるコスト最適化 - Azure VM イメージのカスタマイズ反復⼿法の確⽴ - 現在は POC 検証を完了して実製品プロジェクト導⼊を⽬指している段階 § 個々のトピックについて、これから紹介していきます
  11. Unity Build Server クラウド対応 Unity ビルドライセンスの導⼊・運⽤ノウハウ

  12. Unity アプリの CI/CD 構築の課題 § Unity Editor の動作にライセンスが必要 - Unity

    Editor は Unity の統合開発環境とビルドツールを兼ねる § 従来の Unity Editor ライセンス = ノードロックライセンス - Unity Hub/Editor から Unity ID でサインイン → そのマシンでライセンスをアクティベート - アクティベートしたライセンスは返却すると他のマシンで再利⽤できる - オフラインのアクティベートも可能 § CI/CD のビルドサーバでも同様の⼿段によるライセンスのアクティベートが必要
  13. 従来の Unity Editor ライセンスの細則 § Unity Editor を 2 台のコンピュータにインストールできる

    § 利⽤できるのは 1 ⼈のユーザーだけ § 同時に利⽤できるのは 1 台だけ 1.6 Copies of Unity Software. Unless you have purchased a floating Unity Enterprise Plan or a Unity Build Server subscription, you (and your Designated Users) may install the Unity Editor on both a primary and a secondary computer or operating system, solely for your convenience, but only for use by a single person. You may make a single copy of the Unity Editor solely for backup or archival purposes. For the sake of clarity, you (or your Designated User) may only use one installation at any given time. Unity may in its sole discretion authorize you to install the Unity Editor on additional computers or operating systems upon deactivation of the Unity Editor installed on existing computers. (以下略) Unity Software Additional Terms (December 9, 2020)
  14. 従来の Unity Editor ライセンスによる CI/CD の問題点 § CI サービス (Azure

    Pipelines, GitHub Actions, CircleCI など) との相性の悪さ - ビルドごとにマシン環境が変わるため都度ライセンスの有効化・無効化が必要 - ひとつのシートを複数のビルドで同時に使えないのでスケールさせにくい § チーム向け CI/CD ビルドでの利⽤がライセンス違反となる懸念 - ライセンスを利⽤できるのは 1 ⼈のユーザーだけ § ライセンス費⽤が⾼額 - ビルドマシンごとに 1 つのライセンスを購⼊する必要がある - 並列稼働するビルドマシンには同じライセンスを利⽤できない (同時利⽤の禁⽌)
  15. Unity Build Server ライセンス § 2020 年に登場した待望のビルド専⽤フローティングライセンス § 特徴 -

    サーバからのライセンスのリースと返却を Unity Editor が⾃動的に⾏ってくれる - 所定の期間リースが更新・返却されなかったライセンスは⾃動的に回収される - 複数のユーザーおよびビルドマシンで同⼀のライセンスを共有可能 § 利⽤条件 - ライセンスサーバの構築が必要 - Unity 2019.4.3 LTS 以降で利⽤可能 - CLI batch mode のみ利⽤可能 (GUI Editor は利⽤不能) - Unity Pro または Enterprise ライセンス所有者のみ購⼊可能
  16. Unity Editor ライセンスの⽐較 (Pro, 2021/01 時点) 項⽬ 従来 Build Server

    ライセンスの種類 ノードロック フローティング ライセンスサーバ 不要 必要 ライセンスの共有 × ◦ GUI ◦ × CLI (batch mode) ◦ ◦ Unity バージョン すべて 2019.4.3 LTS 以降 ライセンスの単価 198,000 円/年 72,000 円/年 ライセンスの購⼊単位 1 3
  17. Unity Build Server のシステム構成 § フローティングライセンスサーバを Linux または Windows で構築する

    - Unity.Licensing.Server という .NET Core アプリケーションを動かす - HTTP の REST API サーバとして動作しクライアント (Unity Editor) からの接続を受け付ける - 認証機能がないので LAN からの利⽤に限定するか、認証機能を外付けする必要がある
  18. ライセンスサーバの概要 § システム要件 - Windows → Windows 10, Windows Server

    2012, Windows Server 2016 (64-bit versions) - Linux → Ubuntu 16.04+, Red Hat Enterprise Linux 7.x, CentOS 7.x (64-bit versions) § 最低スペック - 最低スペックに関する指定はない - Standard_B1s (vCPU 1 core, RAM 1GB) の Azure Linux VM (Ubuntu 18.04 LTS) で問題なく動作 § ライセンスサーバの識別 - ホスト名・Ethernet MACアドレス・CPUコア数を⾒ている - これらが変更されると動かなくなる可能性がある (クラウド VM やコンテナでは注意が必要)
  19. ライセンスサーバのセットアップ § クイックスタートガイド通りに作業する 1. Unity 組織管理サイトより Unity.Licensing.Server ZIP ファイルをダウンロード 2.

    ライセンスサーバに Unity.Licensing.Server ZIP ファイルを展開 3. Unity.Licensing.Server setup: セットアップ - server-registration-request.xml → Unity 組織管理サイトにアップロード - services-config.json → クライアント (Unity Editor) ⽤の設定サンプル 4. Unity 組織管理サイトでサーバを登録、ライセンスを割り当て - ライセンスの ZIP ファイルがダウンロードできるようになる 5. Unity.Licensing.Server import: ライセンス ZIP ファイルを読み込み 6. Unity.Licensing.Server create-service: サービス作成・開始 - Windows ではサービスが作られ、 Linux では systemd サービスユニットが作られる
  20. ライセンスサーバのカスタマイズ § ~/.config/unity3d/Unity/LicensingServer/config/licensing-server-config.json の抜粋 接続待ちアドレス・ポート リース更新間隔(分) ライセンス有効期間(分) { ... "Kestrel":

    { "Endpoints": { "HTTP": { "Url": "http://*:8080" } } }, "licensing": { "serverId": "license1", "licenseUsernameObfuscation": false, "floatingLeaseRenewIntervalInMinutes": "15", "floatingLicenseExpirationInMinutes": "480", "licenseSigningCertificatePassword": "..........", "PluginsDirectory": "Plugins", "defaultToolset": "license1_.........." }, "adminIpWhitelist": "127.0.0.1;::1", ... }
  21. ライセンスサーバの REST API § マニュアルに記載はないが、リース状況の確認などができる REST API が存在する → ⼯夫すれば、ライセンスの利⽤状況を可視化できるダッシュボードが作れそう

    $ curl -s http://127.0.0.1:8080/v1/admin/lease | jq . [ { "floatingLeaseId": 60, "token": "4a4497a6-656d-4344-88b8-68af0f53de6e", "createdTimeUtc": "2021-01-15T01:39:13.9707292", "lastRenewalTimeUtc": "2021-01-15T01:39:13.9707292", "isRevoked": false, "clientEntitlementContext": { "EnvironmentDomain": "build1uk400000V", "EnvironmentHostname": "build1uk400000V", "EnvironmentUser": "AzDevOps", "Legacy.MachineBinding1": "00430-00000-00000-AA299", "Legacy.MachineBinding4": "MDAwMC0wMDA3LTAyODMtMzI0OC04OTk5LTcxNDktNzU=", "Legacy.MachineBinding5": "00:0d:3a:cc:d6:33" }, "entitlementGroupIds": [ "license1_.........." ] } ]
  22. Unity Editor のセットアップ § Unity Hub をインストールする (必須) § 従来のライセンスをアクティベートしている場合は事前に返却しておく

    § services-config.json ファイルを所定の場所に置く - Windows → %PROGRAMDATA%¥Unity¥config¥services-config.json - macOS → /Library/Application Support/Unity/config/services-config.json - Linux → /usr/share/unity3d/config/services-config.json
  23. services-config.json のカスタマイズ § services-config.json で設定可能な項⽬ - 接続するフローティングライセンスサーバのホスト名とポート - 接続時の各種タイムアウト設定 {

    "licensingServiceBaseUrl": "http://SERVER-IP-ADDRESS:PORT", "enableEntitlementLicensing": true, "enableFloatingApi": true, "clientConnectTimeoutSec": 5, "clientHandshakeTimeoutSec": 10 }
  24. SSH トンネルによる安全な遠隔アクセス § 遠隔ネットワークのビルドマシンに OpenSSH 秘密鍵ファイルを配布し ライセンスサーバに安全にアクセスできる SSH トンネルを作成する §

    Azure Pipelines や GitHub Actions などの CI サービスでのビルドでも利⽤可能になる § OpenSSH はすべてのプラットフォームで利⽤可能であり実装が容易
  25. SSH トンネルのセットアップ § ライセンスサーバ (Ubuntu 18.04 LTS) での作業 - トンネル接続⽤のユーザーアカウント

    license を作成 adduser --system --group --disabled-password --disabled-login license - パスフレーズなしの SSH 秘密鍵ファイルを⽣成 ssh-keygen –f license -N '' - license → license.txt にリネームしてクライアント (Unity Editor) に配布 - license.pub → /home/license/.ssh/authorized_keys にコピー (パーミッションに注意) - /home/license/.ssh/authorized_keys のおすすめ設定 (すべて 1 ⾏で書くこと) restrict,port-forwarding,permitopen="127.0.0.1:8080" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDh0H2m9 cwFy7GJ6MtrKZTWRC+tmdAVW9o/i29tthiDUOSO+m4Jg1VTIPePKDcZFSNrHJwvy2691txqEbcO4HiHcyU2KjmnTLa+oKF69kN HjLYb2+GSI2AmfGGFFp61Q+i5NbVL+2YMv1zQLZWRRodYWsyItGB8Ok/pMkSH0lk3mqjUn+8pWam2mhiEqiJf4xM+6Q+xQDlt6 /3Jv+FAd67l4WK9KHCVyEpm5TdNHKFRJDnNqha/ysIDuASoyi/tFz7qr0Ul/mvgrmub/gHPUxptfy/9+l8w8pNju6aeRwkK49Z unU04DMOkGl8rYLb8dEgP+b4iBucjI1rFxPD7v7jB license@license1
  26. SSH トンネルの利⽤ § SSH トンネルを利⽤する services-config.json 設定 § SSH トンネル作成コマンド

    (Linux / macOS) chmod 0600 license.txt ssh -f -N -o ExitOnForwardFailure=yes -o StrictHostKeyChecking=accept-new ¥ -L 58765:127.0.0.1:8080 -i license.txt license@server.example.com § Windows では次の PowerShell スクリプトを参考にしてください https://github.com/bananedemo/LostCrypt/blob/master/AzureDevOps/Scripts/UnityTunnel.ps1 { "licensingServiceBaseUrl": "http://127.0.0.1:58765", "enableEntitlementLicensing": true, "enableFloatingApi": true }
  27. Unity Build Server まとめ § Unity Build Server の紹介 -

    2020 年に登場したビルド専⽤の Unity Editor フローティングライセンス - 従来のライセンスよりも価格が安く、信頼性の⾼いビルドサーバが実現可能 § Unity Build Server のセットアップと運⽤ノウハウ - ライセンスサーバの仕様や要件、セットアップ⼿順 - 遠隔のビルドサーバや CI サービスから接続できる SSH トンネルのセットアップと利⽤
  28. Azure DevOps による Unity アプリ CI/CD 性能とコストの両⽴を可能とするマネージド CI サービスの活⽤ノウハウ

  29. これからの CI/CD パイプライン (再掲)

  30. Azure DevOps § Microsoft によるプロジェクトホスティングサービス § 同じ Microsoft の GitHub

    と重複するサービスが多い - 相互連携により必要な機能のみ選択して利⽤可能 - 例: GitHub Repository を Azure Pipelines でビルド ただし GitHub の LFS 帯域制限には注意 § Azure DevOps を選ぶ理由 - Azure および Azure Active Directory との緊密な統合 - Microsoft 365 や Visual Studio Subscription を導⼊している 組織・チームにおすすめ Azure DevOps Boards Pipelines Repos Artifacts Test Plans GitHub Actions Repository Packages Issues
  31. Visual Studio App Center § Microsoft によるアプリホスティングサービス - 元は HockeyApp

    という会社のサービスだった § Android/iOS モバイルアプリの対応が充実 - ビルド - クラウド⾃動実機テスト - テスター向けアプリ配布・⾃動更新 - 診断・クラッシュ収集・アナリティクス § Visual Studio App Center を選ぶ理由 - Azure および Azure Active Directory との深い統合 - アプリ配布先を Azure AD や Office 365 のグループ で指定可能 Visual Studio App Center Build Test Distribute Diagnostics Analytics
  32. Azure Pipelines § Azure DevOps の CI/CD パイプラインサービス § Windows/macOS/Linux

    ホストでの実⾏に対応 § リポジトリ内の YAML ファイルでジョブを定義 - ジョブの定義は複雑に⾒えるが、基本構成を押さえれ ば⽐較的簡単に書くことができる - Visual Studio Code 拡張などの⼊⼒⽀援もある - template 構⽂により簡単に複数のファイルに分割可能 でモジュール化・再利⽤しやすい - TypeScript により独⾃の task が定義可能 GitHub Actions の action に似たエコシステムがある - Jenkinsfile を書くよりもメンテナンスはしやすい (個⼈の感想) trigger: none parameters: - name: config type: string default: Development values: [Development, Release] variables: - template: variables.yml jobs: - job: iOSUnityBuild pool: name: UnityWindowsPool1 steps: - template: steps-disk.yml - template: steps-unity.yml parameters: target: iOS config: ${{parameters.config}} publish: xcode - job: iOSXcodeBuild dependsOn: iOSUnityBuild pool: vmImage: macOS-latest steps: - template: steps-xcode.yml parameters: download: current publish: ios
  33. Azure Pipelines エージェント § 2 種類のビルドエージェントとその⽤途 - Self hosted エージェント

    - ⾃分の Azure VM ホストで Unity Editor のビルド - 強⼒な Azure VM 利⽤でビルド時間短縮が可能 - Android アプリは APK/AAB を出⼒して完了 - iOS アプリは Xcode プロジェクトを出⼒して Microsoft hosted エージェントに引き継ぐ - Microsoft hosted エージェント - Microsoft の macOS ホストで Xcode のビルド - iOS アプリのビルド・署名・IPA 出⼒ - Azure VM では macOS が使えないため利⽤する
  34. Android および iOS アプリのビルド実⾏例 Android Self hosted Windows VM iOS

    Self hosted Windows VM iOS MS hosted macOS VM
  35. Azure Pipelines vs Unity Cloud Build ビルド実⾏時間⽐較 § https://github.com/bananedemo/LostCrypt サンプルプロジェクトをクリーンビルド

    § 厳密な⽐較ではありませんので、あくまで参考の値としてください 価格 Android Total Android IL2CPP iOS Unity Xcode archive Xcode export Unity Cloud Build macOS Unknown spec ¥1100/m 28m04s 337.114s 33m11s Azure VMSS D4as_v4 Windows Server 2019 vCPU:4 RAM:16GB ¥27.78/h 12m31s 200.025s 8m9s 5m23s (MS hosted) 6m42s (MS hosted) Azure VMSS D8as_v4 Windows Server 2019 vCPU:8 RAM:32GB ¥55.55/h 9m27s 128.513s 6m43s
  36. Azure Pipelines self hosted エージェントのオートスケール § Self hosted エージェントの特徴 -

    良い点 → 強⼒な VM や永続ストレージなどを駆使してビルド時間短縮ができる - 悪い点 → 強⼒な VM を常時稼働させると莫⼤なコストがかかってしまう § Azure 仮想マシンスケールセット (VMSS) エージェントプール - 2020 年の夏に Azure Pipelines に追加された新しい機能 - VM の稼働コスト、管理コストの削減に⼤きな効果 - 待機ジョブの数にあわせ VM の稼働数を⾃動的に増減してくれる (0 まで減らすことも可能) - VM のエージェントインストール、プール登録、後始末も⾃動でしてくれる § 他のマネージド CI サービスにはない Azure Pipelines ならではの機能 - Azure Pipelines が Azure API で VMSS と VM を直接制御 → 常時稼働 VM が不要 - GitHub Actions や GitLab CI などでは常時稼働の self hosted runner が必要
  37. VMSS エージェントプールのセットアップ § Azure との緊密な統合により簡単にセットアップ・運⽤できる 1. Azure で VMSS を作成する

    - VM サイズ (CPUコア数・メモリ) を選ぶ - VM イメージ (起動ディスクのイメージ) を選ぶ アプリごとのカスタマイズによりビルド時間短縮 (後述) - Ephemeral OS Disk → VM のローカル SSD を起動ディスクとするオプション さらなるデプロイ時間短縮・ストレージコスト削減 2. Azure Pipelines で self hosted エージェントプール作成時に VMSS を選択する - 任意の Azure サブスクリプションの VMSS が簡単に認証・選択可能 - オートスケールや VM の挙動など様々な設定ができる
  38. VMSS エージェントプールの設定と稼働状況確認 § VM数最⼤値 VM数最⼩値 VMアイドル判定時間 などが設定できる

  39. VMSS エージェントプールジョブ実⾏状況確認 Wait time VM 起動待機時間 4~5 分ほど

  40. Azure Pipelines のコスト § ビルドエージェントが並列に実⾏できる数に課⾦される - ⾮公開プロジェクトでは self hosted エージェントにも費⽤がかかるので注意

    - ⽇毎に課⾦されるので、ビルドしない⽇は 0 に設定すれば無駄な費⽤はかからない 種類 並列実⾏数 単価 公開プロジェクト 無料枠 ⾮公開プロジェクト 無料枠 MS hosted 4,480 円/⽉ 10 1 ただし1800分/⽉まで Self hosted 1,680 円/⽉ 無制限 1 Visual Studio Enterprise サブスクライバごとに +1
  41. Azure Pipelines の課題と要望 § Xcode ビルドの⾼速化 - Microsoft hosted エージェントの

    macOS マシンが⾮⼒なのが問題 - 価格がリーズナブルで強⼒な macOS VM がクラウドにほしい - M1 Mac mini や AWS の mac1.metal で self hosted エージェントを動かして⽐較してみたい § VMSS エージェントの起動待機時間 - ゼロからの実⾏では 4 〜 5 分の VM 起動待機時間があるのでこれを短縮したい - Azure Container Instances (ACI) によるエージェントプールに対応してほしい § Linux コンテナの採⽤ - Linux 版 Unity Editor で問題なくビルドができるなら Linux を使っていきたい - これから実際の製品などで検証していく
  42. Azure DevOps まとめ § Azure DevOps および Visual Studio App

    Center を活⽤した Unity モバイルアプリ (Android / iOS) の CI/CD パイプライン構築 § Azure Pipelines VMSS エージェントプールによる ビルドパフォーマンス向上と VM 稼働コスト・管理コスト削減の両⽴ § Unity モバイルアプリ (Android / iOS) サンプルプロジェクト https://github.com/bananedemo/LostCrypt
  43. Unity アプリビルド VM イメージ Azure Image Builder と Customazed CLI

    による効率的な VM イメージ管理
  44. Azure VM イメージ § VM イメージ = VM 作成の元となるディスクイメージ §

    VM イメージのカスタマイズ - Azure Pipelines self hosted エージェントによるビルドのパフォーマンス向上に重要な要素 - Unity Editor, Android SDK, Visual Studio などのツールをプリインストールしておく
  45. VM イメージカスタマイズの⼿順 § イメージ構築作業⽤の VM を作成・起動 - Marketplace の他にも既存 Image,

    Shared Image Gallery のからでも作成可能 § VM 内カスタマイズ作業 - ソフトウェア・アップデートの適⽤ - 必要なソフトウェアのインストール、設定の変更 - sysprep (Windows) または waagent (Linux) によるデプロビジョニング § VM シャットダウン・停⽌ § VM イメージのキャプチャ - Image や Shared Image Gallery のリソースとして VM イメージを保存する § VM 削除
  46. VM イメージカスタマイズの⾃動化 § ⼿作業による VM イメージ構築の問題点 - ⻑時間拘束される (数⼗分〜数時間) -

    ⼿順が複雑で間違えやすい § VM イメージ構築の⾃動化ができるツール - HashiCorp Packer - Azure だけでなく様々なベンダ・プラットフォームに対応するイメージカスタマイズツール - Azure Image Builder (AIB) - Azure によるマネージドサービス (プレビュー) - 上記 Packer を内部で利⽤している
  47. Azure Image Builder の特徴 § 良い点 → マネージドサービスであり⼿軽・安全 - 失敗した場合でも

    VM の後始末を確実に⾏ってくれる - Packer の場合は、数時間にわたるローカルマシンと Azure VM の接続維持が必要 § 悪い点 → セットアップが⾯倒 - ⼤量の補助リソース作成と設定を⼿動で⾏う必要がある - ストレージアカウント・ユーザーMSI・ロール定義・アクセス権限 § 悪い点 → ローカルマシンのファイルの扱いが不便 - VM が必要とするファイルを GitHub リポジトリや Blob Storage に置く必要がある - ローカルファイルを⼿軽に VM に送り込める Packer の⼀番の利点をスポイルしている
  48. Azure Image Builder のファイルの扱い § GitHub やストレージアカウントなどへのアップロードが必要なのが不便 "customize": [ {

    "type": "PowerShell", "name": "CreateBuildPath", "runElevated": false, "scriptUri": "https://raw.githubusercontent.com/danielsollondon/azvmimagebuilder/ma ster/testPsScript.ps1" }, { "type": "File", "name": "downloadBuildArtifacts", "sourceUri": "https://raw.githubusercontent.com/danielsollondon/azvmimagebuilder/ma ster/quickquickstarts/exampleArtifacts/buildArtifacts/index.html", "destination": "c:¥¥buildArtifacts¥¥index.html" },
  49. Customazed CLI の導⼊ https://github.com/yaegashi/customazed § CustomAZed: Customized + Azure な造語

    (かすためいずど) § Go ⾔語で実装された Windows / macOS / Linux で動く CLI ツール § Go テンプレートを活⽤して Azure サービスの利⽤に必要な JSON ファイルの⽣成、 ファイルアップロード、リソース作成などを⾃動的に⾏ってくれる § 対応サービス - Azure Image Builder - Azure VM CustomScript extension - ARM Template Spec (予定)
  50. Customazed CLI のファイルアップロード⽀援機能 § {{upload `script/hello.ps1`}} のようにローカルファイルのパスを指定すると、それを適 切なストレージアカウントにアップロードした上で、ダウンロード URL を埋め込んでくれる

    { "fileUris": [ "{{upload `scripts/hello.ps1`}}" ], "commandToExecute": "powershell -ExecutionPolicy Bypass -Command {{prefix}}/scripts/hello.ps1" } { "fileUris": [ "https://customazed12345.blob.core.windows.net/customazed/9a85b47c-2e6e-508f-9c80-9dc6fb2d15 f3/scripts/hello.ps1" ], "commandToExecute": "powershell -ExecutionPolicy Bypass -Command 9a85b47c-2e6e-508f-9c80-9dc6f b2d15f3/scripts/hello.ps1" }
  51. Customazed CLI の導⼊効果 § ビルド担当者が気軽に VM イメージ作成を試⾏・反復できるようになった - ⾯倒な Azure

    Image Builder の環境構築を⾃動化 - 利⽤環境を選ばない: Windows, macOS, Linux 他に対応 - 作業者は⼿元にある設定やスクリプトのファイルをいじるだけでよい § Unity アプリビルド⽤ VM イメージ作成の実例 - https://github.com/bananedemo/bananedemo-images
  52. Customazed CLI の情報 § Qiita の紹介記事 Azure Advent Calendar 2020

    14⽇⽬ https://qiita.com/yaegashi/items/5216a9b37c2041b93a3a § 第30回 Tokyo Jazug Night (Online) https://jazug.connpass.com/event/197139/ https://www.slideshare.net/yaegashi/customazed-cli-vm Customazed CLI: カスタムVMイメージ作成⽀援ツール 2020-12-16 第30回 Tokyo Jazug Night (Online) ⼋重樫 剛史 Takeshi Yaegashi
  53. まとめ Unity アプリ CI/CD クラウドシフトの取り組みの成果と今後の計画について

  54. 本⽇のまとめ § Unity Build Server - クラウドでの共有利⽤に対応した新しい Unity Editor ライセンス

    - SSH トンネルを活⽤した安全なライセンスサーバの遠隔利⽤ § Azure DevOps & Azure Pipelines VMSS エージェントプール - Azure Pipelines による Android/iOS Unity アプリ CI/CD パイプライン構築 - VMSS エージェントプールで簡単に実現できるオートスケール、性能とコストの両⽴ § Azure Image Builder & Customazed CLI - VM イメージ構築のマネージドサービスと⾃作 CLI ツールの紹介
  55. サンプルプロジェクト bananedemo 組織のプロジェクトを公開していますので参考にしてください - https://github.com/bananedemo/LostCrypt - PowerShell ビルドスクリプトと Azure Pipelines

    YAML ファイルのサンプル - Unity Technologies のサンプルプロジェクト LostCrypt をベースとしている - https://dev.azure.com/bananedemo/LostCrypt - LostCrypt をビルドする Azure DevOps プロジェクトのサンプル - Azure Pipelines のビルドログなどが⾒える - https://github.com/bananedemo/bananedemo-images - Azure Image Builder と Customazed CLI により Unity アプリ CI/CD ⽤の VM イメージを構築するサンプル
  56. 謝辞 § 本講演は次のみなさまの協⼒をいただきました。ありがとうございます。 - ユニティ・テクノロジーズ・ジャパン - David Scripps (デイビッド・スクリプス) 様

    - ⼤前 広樹 様 - ⽇本マイクロソフト - 下⽥ 純也 様 - 武⽥ 正樹 様 - ⻄島 孝⽣ 様
  57. おわり