Jenkinsを使ったコンシューマゲームでのデプロイとテスト

19,419 views

Published on

Jenkins ユーザ・カンファレンス 2015の講演資料です。
弊社で開発したPS3/VitaゲームのJenkins使用事例を紹介します。主な内容としては自動ビルドとデプロイ、自動テストで、デプロイでは並列化を使いPS3向けのROMやVITAのパッケージ、日本版、アジア版など、あわせて数百ギガのデータを6時間で作成する手法を紹介します。
また、自動テストではAIを使用したモンキーテストやスモークテストの事例を紹介します。

Published in: Engineering
0 Comments
68 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
19,419
On SlideShare
0
From Embeds
0
Number of Embeds
4,592
Actions
Shares
0
Downloads
80
Comments
0
Likes
68
Embeds 0
No embeds

No notes for slide
  • 私の簡単な経歴です。
    プロジェクトマネジメント歴は4年ほどで
    プロジェクトマネジメントプロフェッショナルと認定スクラムマスターの資格を持っています。
  • 私の簡単な経歴です。
    プロジェクトマネジメント歴は4年ほどで
    プロジェクトマネジメントプロフェッショナルと認定スクラムマスターの資格を持っています。
  • Jenkinsを使ったコンシューマゲームでのデプロイとテスト

    1. 1. Jenkinsを使った コンシューマゲームでの デプロイとテスト 2015.1.11
    2. 2. 自己紹介 • 田中 宏幸 ( 38 ):株式会社イリンクス / 代表取締役社長 • 経歴 – 日本ファルコム株式会社 メインプログラマー – 株式会社カプコン PS2描画エンジンプログラマ – 株式会社ゲームリパブリック プログラマー統括 – 株式会社イリンクス 代表取締役社長 • 資格 – PMI認定プロジェクトマネジメントプロフェッショナル – 認定スクラムマスター • CI歴 – CruiseControllから初めて9年ほど – 今回のJenkinsはプログラマーの野口が管理 1
    3. 3. 宣伝−スタッフ募集 • プログラマー、プロジェクトマネージャー募集中 – アジャイル開発 – Jenkins – PS4 – Hansoft • http://www.ilinx.co.jp 2 気になるキーワードがある方は是非ご応募下さい!
    4. 4. プロジェクト概要 • コンシューマゲーム。PS3とVITAで同時発売 • 日本版とアジア版の2地域で同時発売 • PS3版のデータ容量はZIP圧縮済みで6GB • ファイル数 約11万 • シェーダー数 – バーテックスシェーダー 3121個 – ピクセルシェーダー 3132個 3
    5. 5. デプロイについて 4
    6. 6. プロセス 5 上記のPS3,VITA,日本版,アジア版を作成する必要がある 実行ファイルのビルド SCEのツールでパッケージ化 細かいネイティブデータをパックする 中間データを各ハードのネイティブデータに変換 シェーダーの作成 サーバーへコピー
    7. 7. シェーダーの作成 • シェーダー内でif文は重くて使えない – シェーダーを沢山用意し、呼び出すシェーダー切り替える • 全パターンのシェーダーを作成すると 天文学的な数になる – スペキュラ 有/無、自己発光 有/無、水面 有/無 金属 有/無、点光源0~4、影 有/無… – 恐らく数兆パターンくらい • 全モデルを全マップで表示し、使用しているシェーダ ーパターンを抽出。そのシェーダーのみをコンパイル – VITA実機で動かす必要が有るため、4時間ほど掛かる 6
    8. 8. 中間データを各ハードの ネイティブデータに変換 • PS3はビッグエンディアン VITAはリトルエンディアン。 – パディングなども違う • 中間データはxmlやCSVなどで保持。それを各ハード でバイナリに変換してネイティブデータを作成 • 各ハードはCPUがPCに比べて貧弱なため、変換にか なり時間が掛かる。特にVITAが遅い • 差分データだけを変換するが それでも2~4時間ほど掛かる 7
    9. 9. 細かいネイティブデータを パックする • キャラを1体ロードする際、モデルデータ、アルベド 、ノーマル、スペキュラ、エミッシブ等のテクスチャ やパラメータCSVなど、数十ファイル必要 • fopenを数十回行うのは非効率 • ファイルをパックし、fopenとreadは1回でオフセッ トにポインタを差し込む事でロードが数倍~数十倍早 くなる • 全データを舐めるのと、VITA実機でパックするため 6時間ほど掛かる 8
    10. 10. 特にVITA版が時間がかる 9
    11. 11. VITAのデプロイ時間 10 実行ファイルのビルド SCEのツールでパッケージ化 細かいネイティブデータをパックする 中間データを各ハードのネイティブデータに変換 シェーダーの作成 5分 x 2 3~4時間 2~4時間 6時間 10分 x 2 全部合わせると14時34分掛かる サーバーへコピー 2分 x 2
    12. 12. Build Flow Pluginで 並列実行させる 11
    13. 13. 12
    14. 14. Jenkinsの管理 • 各ジョブは細かく分け「Build Flow Plugin」で制御 – ジョブの実行順をDSLで記述でき 実行順を自由に組み替える事が可能 – ジョブを並列で実行できる – 状況に応じたデプロイパターンが作成できる – 成功時、失敗時の分岐や失敗時に リトライが簡単に書ける
    15. 15. 14
    16. 16. 15 SVN更新 ビルド ネイティブデータ変換 パックリストA パックリストB シェーダーコンパイル シェーダーファイルダウンロード パックリストダウンロード
    17. 17. 16
    18. 18. 17 SVN更新 ビルド ネイティブデータ変換 パックリストA パックリストB シェーダーファイルダウンロード パックリストダウンロード
    19. 19. 18
    20. 20. 並列 並列処理 20 Slave02 ネイティブ データに変換 Slave01 リソースパック リスト作成A Slave04 リソースパック リスト作成B Slave03 シェーダ作成 Slave02 リソースパックリストをサーバからダウンロード Slave02 シェーダをサーバからダウンロード Slave02 細かいネイティブデータをパックする Slave02 SCEのツールでパッケージ化 Slave02 サーバーへコピー 2~4時間 3時間 2時間 3~4時間 1分 2分x2 2時間 10分x2 2分
    21. 21. 並列実行の結果 5時間~9時間で終わるように 21
    22. 22. 難点 • ジョブの名前が変更された場合にDSLの記述も修正し ないといけない • 事前にフローを視覚化できない (実行後と実行中に実際通ったフローは確認できる)
    23. 23. 23
    24. 24. WORKFLOW PLUGIN 使えば解決(T-T まさか基調講演で解決されるとは… 24
    25. 25. 各ジョブの例 • 各ジョブの例 – cd ".programmasterPS3tools" – svn update . – powershell -File ".make_package_33_ShaderCompile.ps1" – exit $LastExitCode • ビルドコマンドはPowershellを呼ぶだけ – PowershellをSVN管理する事で いつ誰が変更したのかが判る 25
    26. 26. その他 • ジョブにカスタムワークスペースやスクリプトの場所 を指定するときは、ノードの設定で環境変数を指定で きるのでそれを使うと楽になる – SSDの容量不足で別のドライブを指定する時も 一か所変えるだけで済む – スクリプトを流用しやすい • 処理するSlaveが増えたのでブランチへ切り替えるの が大変 – 一括で特定のブランチに切り替える等のスクリプトは準備 しておいたほうが良い 27
    27. 27. 28
    28. 28. テスト 29
    29. 29. スモークテストとモンキー テスト • スモークテスト – スモークテストはビルド確認テストのこと。 ビルド後に単純なテストを流す。 • モンキーテスト – 装置やソフトウェアのテスト手法の一つで、テス ト箇所や操作手順などを定めず、実施者がその場 の思いつきで操作してみるもの。 30
    30. 30. スモークテスト • Windows版を実行しミッションに入れるかチェック – Windows版に引数を渡すことで、好きなミッションから開 始できるような仕組みを用意 – 1分待ってもTTYに「application_shutdown_success」が 出なければリターンコード1を返す外部ツールを開発 – dbs2io.exe "-exec:GP.exe /mission 1 /autoplay /shutdown 60" -work:binwindows -exit:application_shutdown_success -time:60 – 起動からミッションスタート、終了までのワークフローや リソースに問題が無いかが確認できる 31
    31. 31. その他のテスト • 全エフェクトの再生チェック機能 • 全データがネイティブデータに変換出来るか チェック機能 • データに埋め込まれているパスが正しいか チェック機能 32
    32. 32. エフェクト再生チェック動画 33
    33. 33. モンキーテストその1 • ゲーム開始からエンディングまでの通しプレイを自動 で行うAIを作成 • 敵が居たら敵を良い感じに攻撃。次エリアが開放され たら敵AIも使用しているパスを使って移動。 • 各ステートに対して動作を変更 – リザルト画面 ○ボタン連打 • 3回ミッションに失敗したら無敵&攻撃力100倍 34
    34. 34. モンキーテスト動画 35
    35. 35. モンキーテストその2 • メニューで色々な操作を自動でする機能 • 各メニューで使用するキーや間隔が違うため、 ステートをチェックして内容を変える – カスタマイズメニュー LRキーで部位が変わる – ペイントメニュー 左右押しっぱなしで色が変わる – トップメニュー キャンセルを押すとメニューから抜けて しまう 36
    36. 36. モンキーテストの理由 • リソースの開放漏れ – 「ミッションクリア」のリソースだけ開放されてない – 24時間以上連続でプレイしているとメモリ不足で落ちる – VITA版はサスペンドなので電源を落とさない事がある • ミッション**の途中で落ちる – ミッションスクリプトの分岐が正しくない – 中ボスのデータが破損している • 長時間プレイしないと起きない問題は多い 37
    37. 37. モンキーテストの問題 • 作成やメンテナンスにコストが掛かる – デバッグが始まると忙しくて作っている暇が無い – スケジュールにゆとりがある時にどれだけ作れるかが重要 • ある程度パターン化するため発見できないバグも多い – このミッションでボスを10秒以内に倒すと…等 • チェックに非常に時間が掛かる – まる1日動かしても1回もクリア出来ない 38
    38. 38. まとめ • 属人化を廃し、品質を担保するためには Jenkinsによるデプロイとテストは重要 • Jenkinsでの環境構築を開発スケジュールに 予め入れておく – 忙しくなると環境を作っている暇が無くなる – 今のプロジェクトだけでなく、今後のプロジェクトでも流 用できるため、費用対効果も高い 39

    ×