Techhills 6.18

1,001 views

Published on

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,001
On SlideShare
0
From Embeds
0
Number of Embeds
56
Actions
Shares
0
Downloads
4
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Techhills 6.18

  1. 1. ネイティブゲーム開発を支えるJenkinsKLab株式会社 李 承益
  2. 2. 使い方を間違えたJenkins
  3. 3. ● 李 承益(りちぇんい)● 台湾人● 2008日本上陸● 大学院でOSの研究● 2012新卒自己紹介
  4. 4. ● どんなプロジェクト?● どうやって開発してる?● Jenkinsをどんな風に酷使してる?● それでみんなが幸せになった?Jenkinsの間違った使い方
  5. 5. どんなプロジェクト?
  6. 6. ● リッチな画面と演出!○ アセットファイル○ 画像○ 音声● マルチプラットフォーム!○ iOS、Android● クライアント・サーバスマートフォンゲーム
  7. 7. Unity?Cocos2d?どうやって開発してる?
  8. 8. _人人人人人人人人人人人_> 突然の自社エンジン < ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
  9. 9. ● Lua○ ゲームロジック● マルチプラットフォーム対応○ iOS、Android○ Windows● アセッツ周り→開発ツール自社エンジン
  10. 10. 開発ツール● アセットの設計○ UI、演出○ テキスチャー配置● 各PFの形式にPublish○ 画像、音声データの圧縮
  11. 11. コードを書くことから、リリースまで● コードを書く● データを突っ込む● 画像を突っ込む● Windowsで動作確認する● Publishする● おもむろにMacにコピーする● Xcodeを開いてコンパイルする
  12. 12. 普通
  13. 13. ● マスターデータとは○ ゲーム中のあらゆるパラメータ○ 100を超えるExcelシート!○ 複数人・同時・分散作業!● シート間の整合性を守ることが絶望的!マスターデータのコピー地獄
  14. 14. マスターデータをGoogle Docsに置く● Google Docs○ 複数人で!同時に!同じファイルを編集できる!○ そこにあるものを開けば常に最新!常に正である!● Google DocsからのマスターデータDLツールを作った!
  15. 15. 問題● クライアントとサーバ○ レポジトリが分かれている○ 両方への更新が必要○ 両方が同じもの見ていることを保証したい● git submodule導入
  16. 16. やりたいことはとても簡単● マスターデータをダウンロード● マスターデータのレポジトリを更新する● クライアントとサーバのレポジトリを更新する● ただ面倒くさいだけ
  17. 17. git submoduleでのワークフローgit fetchgit reset --hardgit clean -dfgit checkout $BRANCHgit rebase origin/$BRANCHgit submodule foreach reset --hardgit submodule foreach clean -dfgit submodule update...
  18. 18. git submoduleでのワークフロー● gitより複雑● クライアントとサーバ、片方漏れると問題がでる● なんとなく怖い
  19. 19. Jenkinsのジョブを作ったgit fetchgit reset --hardgit clean -dfgit checkout $BRANCHgit rebase origin/$BRANCHgit submodule foreach reset --hardgit submodule foreach clean -dfgit submodule update...
  20. 20. 結果● ワンクリック● 誰でも実行できる○ 開発○ 企画○ J( ー`)し● 実行結果がわかりやすい
  21. 21. その日から、我々のJenkins依存が始まった…
  22. 22. 自動ビルドもやってみよう!● Windowsでpublish● Macでビルド● サーバー間のデータ転送どうしよう?○ backlogも取っておきたい○ publishデータのバージョンを選択可能にしたい● とりあえず全部gitに突っ込む
  23. 23. さらに必要なものと要らないものを次々と導入…● マスターデータの静的チェック● ダウンロードパッケージの処理○ パッケージの生成○ パッケージのアップロード○ Windows -> Mac -> Linux● コンパイル時のパラメータ調整● 音を出す
  24. 24. ジョブが長すぎる!
  25. 25. 分割してモジュール化したい
  26. 26. Build Pipeline
  27. 27. Build Pipeline● Parameterized Build● Parameterized Trigger● 本当の意味での「パイプライン」じゃない○ レポジトリcheckoutでジョブ間の依存性が発生する○ ジョブの再利用が難しい○ ジョブコピーしないと並列化できない
  28. 28. Build Flow
  29. 29. Build Flow● DSLでジョブの組み合わせができるguard {build("update",ENGINE_BRANCH: params.ENGINE_BRANCH,CLIENT_BRANCH: params.CLIENT_BRANCH)build("build")} rescue {build("reset")}
  30. 30. Build Flow
  31. 31. Build Flow● 分かりやすい結果表示○ どこで失敗したか一見で分る○ カッコイイ!(・∀・)● フロー毎にワークスペースを持っている○ フロー毎のデータ格納先○ git shallow cloneでコピー量減らす○ 複数フローの並列実行
  32. 32. Jenkins「はたらくぞ!」
  33. 33. Jenkins氏、熱で倒れる・・・
  34. 34. で、みんなが幸せになった?
  35. 35. ● 実行ステータス可視化● ステップの長い、複雑なタスクをカプセル化● 実行の敷居が低くなった良くなったところ
  36. 36. 不幸になったところ● 中身が分かりにくくなる● 複雑なことが簡単になったわけではない○ 言語 (DSL, bash, python, ruby, PowerShell)○ OS (Windows, Mac, Linux)● Jenkinsの介護係というポジションの誕生○ 不幸になった人● 気づいたら属人化が進んだ
  37. 37. まとめ● 複雑なことが、簡単に実行できるようになった● Jenkinsのジョブに複雑度を集約することになった

×