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

More Related Content

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

Editor's Notes

  • #3: 私の簡単な経歴です。 プロジェクトマネジメント歴は4年ほどで プロジェクトマネジメントプロフェッショナルと認定スクラムマスターの資格を持っています。
  • #4: 私の簡単な経歴です。 プロジェクトマネジメント歴は4年ほどで プロジェクトマネジメントプロフェッショナルと認定スクラムマスターの資格を持っています。