SlideShare a Scribd company logo
1 of 57
Download to read offline
Azure DevOps で実現する
Unity アプリのハイパフォーマンス CI/CD
株式会社バンダイナムコスタジオ
⼋重樫 剛史 Takeshi Yaegashi
⾃⼰紹介
⼋重樫 剛史 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
#推しテク総選挙
§ 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
Unity アプリ CI/CD のクラウドシフト
バンダイナムコスタジオにおける取り組みの紹介
バンダイナムコスタジオにおける Unity
§ 様々なマーケット・プラットフォーム向け製品で採⽤される重要なミドルウェア
- モバイル→ Android・iOS デバイス
- 家庭⽤ → コンソール・PC
- 業務⽤ → VR アトラクション・アミューズメント施設
- この講演では、主にモバイル向けアプリの事例を扱います
§ 数百の Unity Editor ライセンスを購⼊・管理
- 少なからぬ数が CI/CD のビルドサーバに使われている
- ライセンス管理の効率化、コスト削減は組織として重要な課題のひとつ
バンダイナムコスタジオにおける COVID-19
§ 2020年4⽉以降、ほとんどの従業員は在宅勤務となり、社屋には⼈がいなくなった
- ⻑期化に伴い、グループ企業全体で事業拠点統廃合が計画されている
- バンダイナムコスタジオでも、サーバなどの機材を削減するため、リポジトリやビルドな
どの役割をオンプレミスからクラウドに移⾏させる動きが加速
§ バンダイナムコスタジオの Unity アプリ開発体制の変化
- 従業員は在宅で Unity Editor などを使⽤し VPN により社屋内のサーバに接続
- CI/CD は変わらずオンプレミスの⼤量の機材を使⽤ (ほとんどが Mac)
- VPN の不便さ、機材管理の困難さなどの様々な問題
→ オンプレミスに依存しないクラウドで完結する開発体制の確⽴が急務
従来の Unity アプリ CI/CD パイプライン
社屋内で稼働する Unity アプリのビルドサーバ
Mac mini
全部盛り
302,800円(税別)
クラウドシフトした Unity アプリ CI/CD パイプライン
Unity アプリ CI/CD クラウドシフトの課題解決
§ 性能向上を狙いつつ、リーズナブルなコストに抑えることを⽬標として、
2020年10⽉ごろより様々な課題解決に取り組んだ
- 開発ツール (Unity Editor) のクラウドビルドに対応したライセンスの導⼊
- Jenkins CI からの脱却、マネージド CI サービスの活⽤
- ビルドマシン (Azure VM) オートスケールによるコスト最適化
- Azure VM イメージのカスタマイズ反復⼿法の確⽴
- 現在は POC 検証を完了して実製品プロジェクト導⼊を⽬指している段階
§ 個々のトピックについて、これから紹介していきます
Unity Build Server
クラウド対応 Unity ビルドライセンスの導⼊・運⽤ノウハウ
Unity アプリの CI/CD 構築の課題
§ Unity Editor の動作にライセンスが必要
- Unity Editor は Unity の統合開発環境とビルドツールを兼ねる
§ 従来の Unity Editor ライセンス = ノードロックライセンス
- Unity Hub/Editor から Unity ID でサインイン → そのマシンでライセンスをアクティベート
- アクティベートしたライセンスは返却すると他のマシンで再利⽤できる
- オフラインのアクティベートも可能
§ CI/CD のビルドサーバでも同様の⼿段によるライセンスのアクティベートが必要
従来の 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)
従来の Unity Editor ライセンスによる CI/CD の問題点
§ CI サービス (Azure Pipelines, GitHub Actions, CircleCI など) との相性の悪さ
- ビルドごとにマシン環境が変わるため都度ライセンスの有効化・無効化が必要
- ひとつのシートを複数のビルドで同時に使えないのでスケールさせにくい
§ チーム向け CI/CD ビルドでの利⽤がライセンス違反となる懸念
- ライセンスを利⽤できるのは 1 ⼈のユーザーだけ
§ ライセンス費⽤が⾼額
- ビルドマシンごとに 1 つのライセンスを購⼊する必要がある
- 並列稼働するビルドマシンには同じライセンスを利⽤できない (同時利⽤の禁⽌)
Unity Build Server ライセンス
§ 2020 年に登場した待望のビルド専⽤フローティングライセンス
§ 特徴
- サーバからのライセンスのリースと返却を Unity Editor が⾃動的に⾏ってくれる
- 所定の期間リースが更新・返却されなかったライセンスは⾃動的に回収される
- 複数のユーザーおよびビルドマシンで同⼀のライセンスを共有可能
§ 利⽤条件
- ライセンスサーバの構築が必要
- Unity 2019.4.3 LTS 以降で利⽤可能
- CLI batch mode のみ利⽤可能 (GUI Editor は利⽤不能)
- Unity Pro または Enterprise ライセンス所有者のみ購⼊可能
Unity Editor ライセンスの⽐較 (Pro, 2021/01 時点)
項⽬ 従来 Build Server
ライセンスの種類 ノードロック フローティング
ライセンスサーバ 不要 必要
ライセンスの共有 × ○
GUI ○ ×
CLI (batch mode) ○ ○
Unity バージョン すべて 2019.4.3 LTS 以降
ライセンスの単価 198,000 円/年 72,000 円/年
ライセンスの購⼊単位 1 3
Unity Build Server のシステム構成
§ フローティングライセンスサーバを Linux または Windows で構築する
- Unity.Licensing.Server という .NET Core アプリケーションを動かす
- HTTP の REST API サーバとして動作しクライアント (Unity Editor) からの接続を受け付ける
- 認証機能がないので LAN からの利⽤に限定するか、認証機能を外付けする必要がある
ライセンスサーバの概要
§ システム要件
- 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 やコンテナでは注意が必要)
ライセンスサーバのセットアップ
§ クイックスタートガイド通りに作業する
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 サービスユニットが作られる
ライセンスサーバのカスタマイズ
§ ~/.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",
...
}
ライセンスサーバの 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_.........."
]
}
]
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
services-config.json のカスタマイズ
§ services-config.json で設定可能な項⽬
- 接続するフローティングライセンスサーバのホスト名とポート
- 接続時の各種タイムアウト設定
{
"licensingServiceBaseUrl": "http://SERVER-IP-ADDRESS:PORT",
"enableEntitlementLicensing": true,
"enableFloatingApi": true,
"clientConnectTimeoutSec": 5,
"clientHandshakeTimeoutSec": 10
}
SSH トンネルによる安全な遠隔アクセス
§ 遠隔ネットワークのビルドマシンに OpenSSH 秘密鍵ファイルを配布し
ライセンスサーバに安全にアクセスできる SSH トンネルを作成する
§ Azure Pipelines や GitHub Actions などの CI サービスでのビルドでも利⽤可能になる
§ OpenSSH はすべてのプラットフォームで利⽤可能であり実装が容易
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
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
}
Unity Build Server まとめ
§ Unity Build Server の紹介
- 2020 年に登場したビルド専⽤の Unity Editor フローティングライセンス
- 従来のライセンスよりも価格が安く、信頼性の⾼いビルドサーバが実現可能
§ Unity Build Server のセットアップと運⽤ノウハウ
- ライセンスサーバの仕様や要件、セットアップ⼿順
- 遠隔のビルドサーバや CI サービスから接続できる SSH トンネルのセットアップと利⽤
Azure DevOps による Unity アプリ CI/CD
性能とコストの両⽴を可能とするマネージド CI サービスの活⽤ノウハウ
これからの CI/CD パイプライン (再掲)
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
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
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
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 が使えないため利⽤する
Android および iOS アプリのビルド実⾏例
Android
Self hosted Windows VM
iOS
Self hosted Windows VM
iOS
MS hosted macOS VM
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
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 が必要
VMSS エージェントプールのセットアップ
§ Azure との緊密な統合により簡単にセットアップ・運⽤できる
1. Azure で VMSS を作成する
- VM サイズ (CPUコア数・メモリ) を選ぶ
- VM イメージ (起動ディスクのイメージ) を選ぶ
アプリごとのカスタマイズによりビルド時間短縮 (後述)
- Ephemeral OS Disk → VM のローカル SSD を起動ディスクとするオプション
さらなるデプロイ時間短縮・ストレージコスト削減
2. Azure Pipelines で self hosted エージェントプール作成時に VMSS を選択する
- 任意の Azure サブスクリプションの VMSS が簡単に認証・選択可能
- オートスケールや VM の挙動など様々な設定ができる
VMSS エージェントプールの設定と稼働状況確認
§ VM数最⼤値 VM数最⼩値 VMアイドル判定時間 などが設定できる
VMSS エージェントプールジョブ実⾏状況確認
Wait time
VM 起動待機時間 4~5 分ほど
Azure Pipelines のコスト
§ ビルドエージェントが並列に実⾏できる数に課⾦される
- ⾮公開プロジェクトでは self hosted エージェントにも費⽤がかかるので注意
- ⽇毎に課⾦されるので、ビルドしない⽇は 0 に設定すれば無駄な費⽤はかからない
種類
並列実⾏数
単価
公開プロジェクト
無料枠
⾮公開プロジェクト
無料枠
MS hosted 4,480 円/⽉ 10
1
ただし1800分/⽉まで
Self hosted 1,680 円/⽉ 無制限
1
Visual Studio Enterprise
サブスクライバごとに +1
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 を使っていきたい
- これから実際の製品などで検証していく
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
Unity アプリビルド VM イメージ
Azure Image Builder と Customazed CLI による効率的な VM イメージ管理
Azure VM イメージ
§ VM イメージ = VM 作成の元となるディスクイメージ
§ VM イメージのカスタマイズ
- Azure Pipelines self hosted エージェントによるビルドのパフォーマンス向上に重要な要素
- Unity Editor, Android SDK, Visual Studio などのツールをプリインストールしておく
VM イメージカスタマイズの⼿順
§ イメージ構築作業⽤の VM を作成・起動
- Marketplace の他にも既存 Image, Shared Image Gallery のからでも作成可能
§ VM 内カスタマイズ作業
- ソフトウェア・アップデートの適⽤
- 必要なソフトウェアのインストール、設定の変更
- sysprep (Windows) または waagent (Linux) によるデプロビジョニング
§ VM シャットダウン・停⽌
§ VM イメージのキャプチャ
- Image や Shared Image Gallery のリソースとして VM イメージを保存する
§ VM 削除
VM イメージカスタマイズの⾃動化
§ ⼿作業による VM イメージ構築の問題点
- ⻑時間拘束される (数⼗分〜数時間)
- ⼿順が複雑で間違えやすい
§ VM イメージ構築の⾃動化ができるツール
- HashiCorp Packer
- Azure だけでなく様々なベンダ・プラットフォームに対応するイメージカスタマイズツール
- Azure Image Builder (AIB)
- Azure によるマネージドサービス (プレビュー)
- 上記 Packer を内部で利⽤している
Azure Image Builder の特徴
§ 良い点 → マネージドサービスであり⼿軽・安全
- 失敗した場合でも VM の後始末を確実に⾏ってくれる
- Packer の場合は、数時間にわたるローカルマシンと Azure VM の接続維持が必要
§ 悪い点 → セットアップが⾯倒
- ⼤量の補助リソース作成と設定を⼿動で⾏う必要がある
- ストレージアカウント・ユーザーMSI・ロール定義・アクセス権限
§ 悪い点 → ローカルマシンのファイルの扱いが不便
- VM が必要とするファイルを GitHub リポジトリや Blob Storage に置く必要がある
- ローカルファイルを⼿軽に VM に送り込める Packer の⼀番の利点をスポイルしている
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"
},
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 (予定)
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"
}
Customazed CLI の導⼊効果
§ ビルド担当者が気軽に VM イメージ作成を試⾏・反復できるようになった
- ⾯倒な Azure Image Builder の環境構築を⾃動化
- 利⽤環境を選ばない: Windows, macOS, Linux 他に対応
- 作業者は⼿元にある設定やスクリプトのファイルをいじるだけでよい
§ Unity アプリビルド⽤ VM イメージ作成の実例
- https://github.com/bananedemo/bananedemo-images
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
まとめ
Unity アプリ CI/CD クラウドシフトの取り組みの成果と今後の計画について
本⽇のまとめ
§ 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 ツールの紹介
サンプルプロジェクト
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 イメージを構築するサンプル
謝辞
§ 本講演は次のみなさまの協⼒をいただきました。ありがとうございます。
- ユニティ・テクノロジーズ・ジャパン
- David Scripps (デイビッド・スクリプス) 様
- ⼤前 広樹 様
- ⽇本マイクロソフト
- 下⽥ 純也 様
- 武⽥ 正樹 様
- ⻄島 孝⽣ 様
おわり

More Related Content

What's hot

「3Dゲームをおもしろくする技術 」のいろいろな読み方
「3Dゲームをおもしろくする技術 」のいろいろな読み方「3Dゲームをおもしろくする技術 」のいろいろな読み方
「3Dゲームをおもしろくする技術 」のいろいろな読み方Kouji Ohno
 
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例sairoutine
 
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事Manabu Koga
 
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説Fumiya Sakai
 
Google Cloud Game Servers 徹底入門 | 第 10 回 Google Cloud INSIDE Games & Apps Online
Google Cloud Game Servers 徹底入門 | 第 10 回 Google Cloud INSIDE Games & Apps OnlineGoogle Cloud Game Servers 徹底入門 | 第 10 回 Google Cloud INSIDE Games & Apps Online
Google Cloud Game Servers 徹底入門 | 第 10 回 Google Cloud INSIDE Games & Apps OnlineGoogle Cloud Platform - Japan
 
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~モノビット エンジン
 
UnityでUI開発を高速化した件
UnityでUI開発を高速化した件UnityでUI開発を高速化した件
UnityでUI開発を高速化した件Grenge, Inc.
 
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫Yuta Imai
 
【Unite Tokyo 2018】トゥーンシェーダートークセッション#1『リアルタイムトゥーンシェーダー徹底トーク』
【Unite Tokyo 2018】トゥーンシェーダートークセッション#1『リアルタイムトゥーンシェーダー徹底トーク』【Unite Tokyo 2018】トゥーンシェーダートークセッション#1『リアルタイムトゥーンシェーダー徹底トーク』
【Unite Tokyo 2018】トゥーンシェーダートークセッション#1『リアルタイムトゥーンシェーダー徹底トーク』Unity Technologies Japan K.K.
 
【Unite Tokyo 2018】『崩壊3rd』開発者が語るアニメ風レンダリングの極意
【Unite Tokyo 2018】『崩壊3rd』開発者が語るアニメ風レンダリングの極意【Unite Tokyo 2018】『崩壊3rd』開発者が語るアニメ風レンダリングの極意
【Unite Tokyo 2018】『崩壊3rd』開発者が語るアニメ風レンダリングの極意UnityTechnologiesJapan002
 
新しくなったモノビットエンジンを使って10万人規模のサーバを構築するノウハウを公開!2017年10月27日モノビットエンジン勉強会
新しくなったモノビットエンジンを使って10万人規模のサーバを構築するノウハウを公開!2017年10月27日モノビットエンジン勉強会新しくなったモノビットエンジンを使って10万人規模のサーバを構築するノウハウを公開!2017年10月27日モノビットエンジン勉強会
新しくなったモノビットエンジンを使って10万人規模のサーバを構築するノウハウを公開!2017年10月27日モノビットエンジン勉強会モノビット エンジン
 
FINAL FANTASY Record Keeperのマスターデータを支える技術
FINAL FANTASY Record Keeperのマスターデータを支える技術FINAL FANTASY Record Keeperのマスターデータを支える技術
FINAL FANTASY Record Keeperのマスターデータを支える技術dena_study
 
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリームC# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム信之 岩永
 
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!Unity Technologies Japan K.K.
 
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기강 민우
 
未来のプログラミング技術をUnityで -UniRx-
未来のプログラミング技術をUnityで -UniRx-未来のプログラミング技術をUnityで -UniRx-
未来のプログラミング技術をUnityで -UniRx-torisoup
 
CEDEC2015「加算合成コストが0になる!?すぐに使えるP-MAPブレンドテクニック」発表スライド
CEDEC2015「加算合成コストが0になる!?すぐに使えるP-MAPブレンドテクニック」発表スライドCEDEC2015「加算合成コストが0になる!?すぐに使えるP-MAPブレンドテクニック」発表スライド
CEDEC2015「加算合成コストが0になる!?すぐに使えるP-MAPブレンドテクニック」発表スライドToshiyasu Miyabe
 

What's hot (20)

「3Dゲームをおもしろくする技術 」のいろいろな読み方
「3Dゲームをおもしろくする技術 」のいろいろな読み方「3Dゲームをおもしろくする技術 」のいろいろな読み方
「3Dゲームをおもしろくする技術 」のいろいろな読み方
 
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
 
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
 
MRTK-Unreal(UX Tools) を利用した HoloLens 2 アプリ開発 | UNREAL FEST EXTREME 2020 WINTER
MRTK-Unreal(UX Tools) を利用した HoloLens 2 アプリ開発 | UNREAL FEST EXTREME 2020 WINTERMRTK-Unreal(UX Tools) を利用した HoloLens 2 アプリ開発 | UNREAL FEST EXTREME 2020 WINTER
MRTK-Unreal(UX Tools) を利用した HoloLens 2 アプリ開発 | UNREAL FEST EXTREME 2020 WINTER
 
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説
 
Google Cloud Game Servers 徹底入門 | 第 10 回 Google Cloud INSIDE Games & Apps Online
Google Cloud Game Servers 徹底入門 | 第 10 回 Google Cloud INSIDE Games & Apps OnlineGoogle Cloud Game Servers 徹底入門 | 第 10 回 Google Cloud INSIDE Games & Apps Online
Google Cloud Game Servers 徹底入門 | 第 10 回 Google Cloud INSIDE Games & Apps Online
 
CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらいCEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
 
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
 
UnityでUI開発を高速化した件
UnityでUI開発を高速化した件UnityでUI開発を高速化した件
UnityでUI開発を高速化した件
 
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
 
【Unite Tokyo 2018】トゥーンシェーダートークセッション#1『リアルタイムトゥーンシェーダー徹底トーク』
【Unite Tokyo 2018】トゥーンシェーダートークセッション#1『リアルタイムトゥーンシェーダー徹底トーク』【Unite Tokyo 2018】トゥーンシェーダートークセッション#1『リアルタイムトゥーンシェーダー徹底トーク』
【Unite Tokyo 2018】トゥーンシェーダートークセッション#1『リアルタイムトゥーンシェーダー徹底トーク』
 
【Unite Tokyo 2018】『崩壊3rd』開発者が語るアニメ風レンダリングの極意
【Unite Tokyo 2018】『崩壊3rd』開発者が語るアニメ風レンダリングの極意【Unite Tokyo 2018】『崩壊3rd』開発者が語るアニメ風レンダリングの極意
【Unite Tokyo 2018】『崩壊3rd』開発者が語るアニメ風レンダリングの極意
 
新しくなったモノビットエンジンを使って10万人規模のサーバを構築するノウハウを公開!2017年10月27日モノビットエンジン勉強会
新しくなったモノビットエンジンを使って10万人規模のサーバを構築するノウハウを公開!2017年10月27日モノビットエンジン勉強会新しくなったモノビットエンジンを使って10万人規模のサーバを構築するノウハウを公開!2017年10月27日モノビットエンジン勉強会
新しくなったモノビットエンジンを使って10万人規模のサーバを構築するノウハウを公開!2017年10月27日モノビットエンジン勉強会
 
猫でも分かるUMG
猫でも分かるUMG猫でも分かるUMG
猫でも分かるUMG
 
FINAL FANTASY Record Keeperのマスターデータを支える技術
FINAL FANTASY Record Keeperのマスターデータを支える技術FINAL FANTASY Record Keeperのマスターデータを支える技術
FINAL FANTASY Record Keeperのマスターデータを支える技術
 
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリームC# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム
 
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
 
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
 
未来のプログラミング技術をUnityで -UniRx-
未来のプログラミング技術をUnityで -UniRx-未来のプログラミング技術をUnityで -UniRx-
未来のプログラミング技術をUnityで -UniRx-
 
CEDEC2015「加算合成コストが0になる!?すぐに使えるP-MAPブレンドテクニック」発表スライド
CEDEC2015「加算合成コストが0になる!?すぐに使えるP-MAPブレンドテクニック」発表スライドCEDEC2015「加算合成コストが0になる!?すぐに使えるP-MAPブレンドテクニック」発表スライド
CEDEC2015「加算合成コストが0になる!?すぐに使えるP-MAPブレンドテクニック」発表スライド
 

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

Windows Server 2016上でLinuxコンテナが動いた!
Windows Server 2016上でLinuxコンテナが動いた!Windows Server 2016上でLinuxコンテナが動いた!
Windows Server 2016上でLinuxコンテナが動いた!Takashi Kanai
 
Apache cloudstack4.0インストール
Apache cloudstack4.0インストールApache cloudstack4.0インストール
Apache cloudstack4.0インストールYasuhiro Arai
 
.NETlab_AADDCでLinuxRDP認証.pptx
.NETlab_AADDCでLinuxRDP認証.pptx.NETlab_AADDCでLinuxRDP認証.pptx
.NETlab_AADDCでLinuxRDP認証.pptxMichinari Kobuna
 
Kubernetes1.9でWindowsコンテナーをクラスタ化
Kubernetes1.9でWindowsコンテナーをクラスタ化Kubernetes1.9でWindowsコンテナーをクラスタ化
Kubernetes1.9でWindowsコンテナーをクラスタ化Takashi Kanai
 
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築yaegashi
 
OSC 2011 Tokyo/Fall 自宅SAN友の会 (Infinibandお試し編)
OSC 2011 Tokyo/Fall 自宅SAN友の会 (Infinibandお試し編)OSC 2011 Tokyo/Fall 自宅SAN友の会 (Infinibandお試し編)
OSC 2011 Tokyo/Fall 自宅SAN友の会 (Infinibandお試し編)Satoshi Shimazaki
 
Apache CloudStack 4.0 インストール(ver0.5)
Apache CloudStack 4.0 インストール(ver0.5)Apache CloudStack 4.0 インストール(ver0.5)
Apache CloudStack 4.0 インストール(ver0.5)Yasuhiro Arai
 
2010 04クラウド技術講座
2010 04クラウド技術講座2010 04クラウド技術講座
2010 04クラウド技術講座sisawa
 
20121119.dodai projectの紹介
20121119.dodai projectの紹介20121119.dodai projectの紹介
20121119.dodai projectの紹介Osamu Habuka
 
LagopusとAzureとIPsecとDPDK
LagopusとAzureとIPsecとDPDKLagopusとAzureとIPsecとDPDK
LagopusとAzureとIPsecとDPDKShuheiUda
 
Cld002 windows server_2016_で作るシンプ
Cld002 windows server_2016_で作るシンプCld002 windows server_2016_で作るシンプ
Cld002 windows server_2016_で作るシンプTech Summit 2016
 
Kibanaでsysstatを可視化する
Kibanaでsysstatを可視化するKibanaでsysstatを可視化する
Kibanaでsysstatを可視化するKensuke Maeda
 
[Azure Antenna] HPCだけじゃないDeep Learningでも使える ハイパフォーマンスAzureインフラ ~ Azureハイパフォーマ...
[Azure Antenna] HPCだけじゃないDeep Learningでも使える ハイパフォーマンスAzureインフラ ~ Azureハイパフォーマ...[Azure Antenna] HPCだけじゃないDeep Learningでも使える ハイパフォーマンスAzureインフラ ~ Azureハイパフォーマ...
[Azure Antenna] HPCだけじゃないDeep Learningでも使える ハイパフォーマンスAzureインフラ ~ Azureハイパフォーマ...Shuichi Gojuki
 
IETF94 M2M Authentication関連報告
IETF94 M2M Authentication関連報告IETF94 M2M Authentication関連報告
IETF94 M2M Authentication関連報告Masaru Kurahayashi
 
CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1Kotaro Noyama
 
Rancher2.3とwindows Containerで作るkubernetesクラスタ
Rancher2.3とwindows Containerで作るkubernetesクラスタRancher2.3とwindows Containerで作るkubernetesクラスタ
Rancher2.3とwindows Containerで作るkubernetesクラスタTakashi Kanai
 

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

Windows Server 2016上でLinuxコンテナが動いた!
Windows Server 2016上でLinuxコンテナが動いた!Windows Server 2016上でLinuxコンテナが動いた!
Windows Server 2016上でLinuxコンテナが動いた!
 
Apache cloudstack4.0インストール
Apache cloudstack4.0インストールApache cloudstack4.0インストール
Apache cloudstack4.0インストール
 
.NETlab_AADDCでLinuxRDP認証.pptx
.NETlab_AADDCでLinuxRDP認証.pptx.NETlab_AADDCでLinuxRDP認証.pptx
.NETlab_AADDCでLinuxRDP認証.pptx
 
NVIDIA 入門
NVIDIA 入門NVIDIA 入門
NVIDIA 入門
 
Kubernetes1.9でWindowsコンテナーをクラスタ化
Kubernetes1.9でWindowsコンテナーをクラスタ化Kubernetes1.9でWindowsコンテナーをクラスタ化
Kubernetes1.9でWindowsコンテナーをクラスタ化
 
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
 
20230128.pptx
20230128.pptx20230128.pptx
20230128.pptx
 
Windows Azure PHP Tips
Windows Azure PHP Tips Windows Azure PHP Tips
Windows Azure PHP Tips
 
OSC 2011 Tokyo/Fall 自宅SAN友の会 (Infinibandお試し編)
OSC 2011 Tokyo/Fall 自宅SAN友の会 (Infinibandお試し編)OSC 2011 Tokyo/Fall 自宅SAN友の会 (Infinibandお試し編)
OSC 2011 Tokyo/Fall 自宅SAN友の会 (Infinibandお試し編)
 
Apache CloudStack 4.0 インストール(ver0.5)
Apache CloudStack 4.0 インストール(ver0.5)Apache CloudStack 4.0 インストール(ver0.5)
Apache CloudStack 4.0 インストール(ver0.5)
 
2010 04クラウド技術講座
2010 04クラウド技術講座2010 04クラウド技術講座
2010 04クラウド技術講座
 
20121119.dodai projectの紹介
20121119.dodai projectの紹介20121119.dodai projectの紹介
20121119.dodai projectの紹介
 
LagopusとAzureとIPsecとDPDK
LagopusとAzureとIPsecとDPDKLagopusとAzureとIPsecとDPDK
LagopusとAzureとIPsecとDPDK
 
Cld002 windows server_2016_で作るシンプ
Cld002 windows server_2016_で作るシンプCld002 windows server_2016_で作るシンプ
Cld002 windows server_2016_で作るシンプ
 
[Japan Tech summit 2017] DEP 005
[Japan Tech summit 2017] DEP 005[Japan Tech summit 2017] DEP 005
[Japan Tech summit 2017] DEP 005
 
Kibanaでsysstatを可視化する
Kibanaでsysstatを可視化するKibanaでsysstatを可視化する
Kibanaでsysstatを可視化する
 
[Azure Antenna] HPCだけじゃないDeep Learningでも使える ハイパフォーマンスAzureインフラ ~ Azureハイパフォーマ...
[Azure Antenna] HPCだけじゃないDeep Learningでも使える ハイパフォーマンスAzureインフラ ~ Azureハイパフォーマ...[Azure Antenna] HPCだけじゃないDeep Learningでも使える ハイパフォーマンスAzureインフラ ~ Azureハイパフォーマ...
[Azure Antenna] HPCだけじゃないDeep Learningでも使える ハイパフォーマンスAzureインフラ ~ Azureハイパフォーマ...
 
IETF94 M2M Authentication関連報告
IETF94 M2M Authentication関連報告IETF94 M2M Authentication関連報告
IETF94 M2M Authentication関連報告
 
CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1
 
Rancher2.3とwindows Containerで作るkubernetesクラスタ
Rancher2.3とwindows Containerで作るkubernetesクラスタRancher2.3とwindows Containerで作るkubernetesクラスタ
Rancher2.3とwindows Containerで作るkubernetesクラスタ
 

More from yaegashi

Terraforming Windows Virtual Desktop Infrastructure on Azure
Terraforming Windows Virtual Desktop Infrastructure on AzureTerraforming Windows Virtual Desktop Infrastructure on Azure
Terraforming Windows Virtual Desktop Infrastructure on Azureyaegashi
 
Customazed CLI: カスタムVMイメージ作成支援ツール
Customazed CLI: カスタムVMイメージ作成支援ツールCustomazed CLI: カスタムVMイメージ作成支援ツール
Customazed CLI: カスタムVMイメージ作成支援ツールyaegashi
 
Goで作って配布するAzureコマンドラインユーティリティ
Goで作って配布するAzureコマンドラインユーティリティGoで作って配布するAzureコマンドラインユーティリティ
Goで作って配布するAzureコマンドラインユーティリティyaegashi
 
msgraph: Terraform provider for Microsoft Graph
msgraph: Terraform provider for Microsoft Graphmsgraph: Terraform provider for Microsoft Graph
msgraph: Terraform provider for Microsoft Graphyaegashi
 
go generate 完全入門
go generate 完全入門go generate 完全入門
go generate 完全入門yaegashi
 
msgraph.go: Go言語で Microsoft Graph プログラミング
msgraph.go: Go言語で Microsoft Graph プログラミングmsgraph.go: Go言語で Microsoft Graph プログラミング
msgraph.go: Go言語で Microsoft Graph プログラミングyaegashi
 
AnsibleでAzureの インフラを管理する話 + α
AnsibleでAzureの インフラを管理する話 + αAnsibleでAzureの インフラを管理する話 + α
AnsibleでAzureの インフラを管理する話 + αyaegashi
 
msgraph-sshpubkey
msgraph-sshpubkeymsgraph-sshpubkey
msgraph-sshpubkeyyaegashi
 
Microsoft Graph API Library for Go
Microsoft Graph API Library for GoMicrosoft Graph API Library for Go
Microsoft Graph API Library for Goyaegashi
 
Raspberry Pi + Go で IoT した話
Raspberry Pi + Go で IoT した話Raspberry Pi + Go で IoT した話
Raspberry Pi + Go で IoT した話yaegashi
 
golang binary hacks
golang binary hacksgolang binary hacks
golang binary hacksyaegashi
 
StackExchangeで見たシステムプログラミング案件
StackExchangeで見たシステムプログラミング案件StackExchangeで見たシステムプログラミング案件
StackExchangeで見たシステムプログラミング案件yaegashi
 
Ansible モジュール 作成・配布・貢献
Ansible モジュール 作成・配布・貢献Ansible モジュール 作成・配布・貢献
Ansible モジュール 作成・配布・貢献yaegashi
 

More from yaegashi (13)

Terraforming Windows Virtual Desktop Infrastructure on Azure
Terraforming Windows Virtual Desktop Infrastructure on AzureTerraforming Windows Virtual Desktop Infrastructure on Azure
Terraforming Windows Virtual Desktop Infrastructure on Azure
 
Customazed CLI: カスタムVMイメージ作成支援ツール
Customazed CLI: カスタムVMイメージ作成支援ツールCustomazed CLI: カスタムVMイメージ作成支援ツール
Customazed CLI: カスタムVMイメージ作成支援ツール
 
Goで作って配布するAzureコマンドラインユーティリティ
Goで作って配布するAzureコマンドラインユーティリティGoで作って配布するAzureコマンドラインユーティリティ
Goで作って配布するAzureコマンドラインユーティリティ
 
msgraph: Terraform provider for Microsoft Graph
msgraph: Terraform provider for Microsoft Graphmsgraph: Terraform provider for Microsoft Graph
msgraph: Terraform provider for Microsoft Graph
 
go generate 完全入門
go generate 完全入門go generate 完全入門
go generate 完全入門
 
msgraph.go: Go言語で Microsoft Graph プログラミング
msgraph.go: Go言語で Microsoft Graph プログラミングmsgraph.go: Go言語で Microsoft Graph プログラミング
msgraph.go: Go言語で Microsoft Graph プログラミング
 
AnsibleでAzureの インフラを管理する話 + α
AnsibleでAzureの インフラを管理する話 + αAnsibleでAzureの インフラを管理する話 + α
AnsibleでAzureの インフラを管理する話 + α
 
msgraph-sshpubkey
msgraph-sshpubkeymsgraph-sshpubkey
msgraph-sshpubkey
 
Microsoft Graph API Library for Go
Microsoft Graph API Library for GoMicrosoft Graph API Library for Go
Microsoft Graph API Library for Go
 
Raspberry Pi + Go で IoT した話
Raspberry Pi + Go で IoT した話Raspberry Pi + Go で IoT した話
Raspberry Pi + Go で IoT した話
 
golang binary hacks
golang binary hacksgolang binary hacks
golang binary hacks
 
StackExchangeで見たシステムプログラミング案件
StackExchangeで見たシステムプログラミング案件StackExchangeで見たシステムプログラミング案件
StackExchangeで見たシステムプログラミング案件
 
Ansible モジュール 作成・配布・貢献
Ansible モジュール 作成・配布・貢献Ansible モジュール 作成・配布・貢献
Ansible モジュール 作成・配布・貢献
 

Recently uploaded

AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 

Recently uploaded (9)

AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 

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

  • 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 パイプライン
  • 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 サービスの活⽤ノウハウ
  • 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アイドル判定時間 などが設定できる
  • 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 (デイビッド・スクリプス) 様 - ⼤前 広樹 様 - ⽇本マイクロソフト - 下⽥ 純也 様 - 武⽥ 正樹 様 - ⻄島 孝⽣ 様