Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Croozにおけるjenkins活用事例20130618

14,555 views

Published on

  • Be the first to comment

Croozにおけるjenkins活用事例20130618

  1. 1. CROOZ株式会社鈴木 優一CROOZにおけるJENKINS活用事例
  2. 2. 自己紹介• 鈴木優一• Team 開発推進という部署で全社の開発を効率化させるために必要なツール及び仕組みの開発・保守・運用を行ってます
  3. 3. CROOZが提供するサービスCROOZは、ソーシャルゲームを軸に、世界中にインターネットサービスを提供するエンターテインメント企業です
  4. 4. 本日のアジェンダ• はじめに• CROOZにおけるプロダクト開発スタイル• 開発・保守・運用の諸問題• Jenkinsを導入しようと考えたキッカケ• Jenkinsの活用事例• 導入効果• 今後の展開
  5. 5. はじめに
  6. 6. はじめに本日はJenkinsというツール自体の話はしません。本日はJenkinsをどのように活用し、日々の開発・保守・運用で抱える業務課題の解決に活用するかについて共有したいと思います。今日はテスト自動化の話もしません。
  7. 7. CROOZにおけるプロダクト開発スタイル
  8. 8. CROOZにおけるプロダクト開発スタイルそれはたとえリリース直前でも仕上がりに納得がいかなければ、他の案件からエンジニアをかけ集めてでも、リリースまでに納得のいくモノに仕上げる“オモシロカッコイイ”をツクルために、リリースギリギリまで、全社員一丸となりトライ・アンド・エラーを繰り返すこと。
  9. 9. CROOZにおけるプロダクト開発スタイルこの開発スタイルを満たすために行っていること• コーディングスタイルの共通化• 運用の共通化• 上記を実現する自社フレームワークの構築
  10. 10. CROOZにおけるプロダクト開発スタイルこの3施策によりプロダクト開発チーム間での人的リソースの移動を容易に行えるチームの垣根を超え、より良いサービス実現のためにギリギリまで品質にこだわることができる
  11. 11. 開発・保守・運用の諸問題
  12. 12. 開発・保守・運用の諸問題細かな問題は様々だが最も大きな問題はCROOZの開発スタイルを実現するうえで重要な「コーディングスタイルの共通化」が行われにくくなっていること1日に頻繁に行われる本番へのデプロイの過程で本来不要なファイルが誤って更新されてしまうことが発生したこと
  13. 13. 開発・保守・運用の諸問題(原因)問題が発生する原因について考えてみた• 共通化されているルールは複雑すぎる確かに可読性、パフォーマンスの観点からは共通化すべきだが、覚えなければならないことが多く、古株の社員しか対応できない。
  14. 14. 開発・保守・運用の諸問題(原因)問題が発生する原因について考えてみた• 事業の急拡大に伴い、プログラマが急増したルールが複雑すぎる上に、様々な前職を持つプログラマが急増したため、個々に自分が正しいと考える実装方法が行われている。超属人化している
  15. 15. 開発・保守・運用の諸問題(原因)問題が発生する原因について考えてみた• ルール違反やオペミスを引き起こす疑いのあるコードや設定をプログラマにフィードバックするしくみが無い。運用が性善説で設計されている。問題点をプログラマに伝える仕組みが必要
  16. 16. 開発・保守・運用の諸問題解決のための施策• 現実的に覚えられないルールなら、覚えるのではなくルールから外れているものを機械的に検知し、可視化することでプログラマに伝える。• 同じ考え方で、オペミスを引き起こす疑いのあるコードや設定を機械的に検出し可視化することでプログラマに伝える。
  17. 17. JENKINSを導入しようと考えたキッカケ
  18. 18. JENKINSを導入しようと考えたキッカケ特にJenkinsにこだわっていたわけではない。前節で説明した要件を少ない構築工数で満たせるれことができればToolとしてはどれでもよかった。
  19. 19. JENKINSを導入しようと考えたキッカケその上でなぜJenkinsを導入したかというと…• 構築が容易過去の経験より• 各種プラグインが充実している可視化のための各プラグインが充実している• ジョブ管理ツールとして利用できるジョブ管理ツールとしても利用できる
  20. 20. JENKINSを導入しようと考えたキッカケその上でなぜJenkinsを導入したかというと…• 実装言語に限らず全社横断で利用が可能CROOZではNativeアプリも開発しているため実装言語ごとにSlaveノードを立てられると都合が良い• ドキュメントが豊富CIツールとして歴史があり、調査が容易
  21. 21. JENKINSを導入しようと考えたキッカケ本来ならば自動テストまで行いたいが…まずは既存課題の解決が第一。課題が解決し、共通化してからのテスト出ないとテストケースが膨れてしまうだけ…
  22. 22. CROOZにおけるJENKINS活用事例
  23. 23. 事例① 規約チェックの自動化PHP_Code Sniffer × VenusBase による規約チェック自動化及び可視化• PHP_Code Snifferhttp://pear.php.net/package/PHP_CodeSnifferコーディング規約に沿っているかどうかをチェックするツール• VenusBase自社フレームワーク『Venus』専用のコーディング規約定義スクリプト
  24. 24. 事例① 規約チェックの自動化システム構成図リポジトリサーバ JenkinsVenusBasePJTSourcepull pull pusheclipce PDT + Code SnifferpluginPJTSourcepollingpullCheck Stylephpmdcpdreportingfeedbackcoding
  25. 25. 事例① 規約チェックの自動化
  26. 26. 事例① 規約チェックの自動化システム構成図リポジトリサーバ JenkinsVenusBasePJTSourcepull pull pusheclipce PDT + Code SnifferpluginPJTSourcepollingpullCheck Stylephpmdcpdreportingfeedbackcodingコーディング規約違反については直接エディタ上でWarningとErrorと分けてプログラマに通知
  27. 27. 事例① 規約チェックの自動化システム構成図リポジトリサーバ JenkinsVenusBasePJTSourcepull pull pusheclipce PDT + Code SnifferpluginPJTSourcepollingpullCheck Stylephpmdcpdreportingfeedbackcodingコーディング規約違反については直接エディタ上でWarningとErrorと分けてプログラマに通知Jenkinsではコーディング規約違反のほか潜在バグとなりうる可能性のある箇所についても集計、レポーティング
  28. 28. 事例② 除外ファイルの更新漏れの自動通知リモートシェル × Gitlist による除外ファイルの更新漏れの自動通知• 除外ファイルSTG環境から本番環境にデプロイする際に本番に更新したくないファイルを記述するリスト。同時に複数のリリースやバグ修正が走る際に記述が必要。• GitListhttps://github.com/klaussilveira/gitlistPHP製Gitブラウザ。表示のみ可能。
  29. 29. 事例② 除外ファイルの更新漏れの自動通知システム構成図STGサーバ Jenkinsrsyncreportingfeedbackfixデプロイ設定除外ファイルgit addgit commitmail sendupdate
  30. 30. 事例② 除外ファイルの更新漏れの自動通知システム構成図STGサーバ Jenkinsrsyncreportingfeedbackfixデプロイ設定除外ファイルgit addgit commitmail sendupdate除外ファイルの前回からの更新差分をGitリポジトリで管理し、リンクURLを生成してプログラマにメール送信
  31. 31. 事例② 除外ファイルの更新漏れの自動通知システム構成図STGサーバ Jenkinsrsyncreportingfeedbackfixデプロイ設定除外ファイルgit addgit commitmail sendupdate除外ファイルの前回からの更新差分をGitリポジトリで管理し、リンクURLを生成してプログラマにメール送信プログラマはメールを受信したら業務開始前に除外ファイルの更新漏れを修正。デプロイミスを未然に防止。
  32. 32. 事例② 除外ファイルの更新漏れの自動通知除外漏れ表示画面
  33. 33. その他• Nativeアプリ(Android・xcode)のビルド• 複数散在するリポジトリ間の差分チェック• etc…目的に応じ利用していますが、今回は割愛します
  34. 34. 導入効果
  35. 35. 事例① 規約チェックの自動化• 規約違反件数が約5分の1に削減された。• 新規のコードだけではなく、既存のコードに対する自主的な改善が行われるようになった。• 上記の結果として、ルールを覚えることを必要とせず共通化されたスタイルでコーディングされるようになった。<導入効果>
  36. 36. 事例① 規約チェックの自動化• 運用が定着化するまで時間を要する<課題>いくら規約を覚えなくても良いといっても、IDE上に表示されたWarningやErrorに従い修正を行う必要があるため、慣れるまでに時間を要する。VenusBaseに基づきCode Formatterを定義し修正コスト及び学習時間を短縮化• 全プロジェクトに展開できていない地道に普及活動を行う
  37. 37. 事例② 除外ファイルの更新漏れの自動通知• 導入を行った2013/4/7以降、除外漏れの発生が激減。<導入効果>• 今月に至っては0件。
  38. 38. 今後の展開
  39. 39. 目指すは、テスト自動化
  40. 40. ではなく、
  41. 41. 自動ビルドによるデグレ防止
  42. 42. でもなく、
  43. 43. CIツールを核とした開発のオートメーション化
  44. 44. 今後の展開• リポジトリ更新時の単体テスト自動実行• 要修正箇所のバグチケット自動発行• デプロイ時のコードチェック及びデグレ防止CIを各とした開発のオートメーション化• 各品質指標の計測上記実現のためにまず、現在実施している施策を全プロジェクトに展開させることからスタート• etc…
  45. 45. さいごに
  46. 46. CROOZでは今後の展開を一緒におこなってくれる仲間を募集しております!http://crooz.co.jp/recruit/ご清聴ありがとうございました

×