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.

アメーバピグとJenkinsと私

13,389 views

Published on

第6回 テックヒルズ 『Let’s study Jenkins~さまざまなケーススタディ~』
発表資料

  • Be the first to comment

アメーバピグとJenkinsと私

  1. 1. アメーバピグとJenkinsと私株式会社サイバーエージェント丸山 隆司
  2. 2. 自己紹介名前: 丸山 隆司所属: 株式会社サイバーエージェント    アメーバ事業本部担当: アメーバピグの開発・運用    (2011年5月∼)
  3. 3. 宣伝PCピグも頑張ってますよ
  4. 4. 宣伝日本最大級のアバターコミュニティサービス
  5. 5. 弊社イメージ?何かと誤解されやすいです><  by  NAVERまとめ  h,p://matome.naver.jp/odai/2137085316482128101
  6. 6. 世間一般の弊社イメージ  by  日本経済新聞 h,p://www.nikkei.com/content/pic/20130227/96958A9C93819499E0E5E2E2948DE0E5E2E0E0E2E3E1E2E2E2E2E2E2-­‐DSXZZO5220017027022013000000-­‐PB1-­‐27.jpg
  7. 7. 本日話すこと運用開始してそれなりに期間がたったピグでの運用効率化の取り組み弊社イメージに反して大変泥臭い内容でお送りします
  8. 8. アジェンダアメーバピグでのJenkinsケーススタディ•  コードの品質管理•  バッチ制御•  オペレーションの自動化
  9. 9. -バグの発生を抑える-Case 1:コードの品質管理
  10. 10. 理想的なCIの形1) Compile2) Unit testing3) Inspection4) Reporting5) DeploytrunkbranchIRCCI serverdeveloperVCS
  11. 11. Piggの現実(2011年当時)trunkbranchdeveloperreview•  CI環境なし•  デプロイは手動•  品質担保はレビューのみ•  テストコード(ほぼ)無し–  あってもほったらかし–  新卒「テストしてないんスか?」subversion
  12. 12. まずは入れてみた1)  Test compile2)  Check Style3)  Findbugs4) ReportingtrunkJenkinssubversion
  13. 13. 予想はしてましたが…•  全PJ合わせて数千個のFindbugs警告– うち約160個はけっこう深刻•  放っておくと日々増えるどこから手を付けるの?\(^o^)/
  14. 14. 理想に近づけるための戦略•  CI環境の整備•  危ないバグはみんなで修正•  その警告、本当に必要?
  15. 15. 理想に近づけるための戦略•  CI環境の整備•  危ないバグはみんなで修正•  その警告、本当に必要?
  16. 16. CI環境の整備1)  Compile2)  Inspection3) ReportingtrunkbranchIRCJenkinsdeveloperHook scriptfeedbackcommit
  17. 17. 理想に近づけるための戦略•  CI環境の整備•  危ないバグはみんなで修正•  その警告、本当に必要?
  18. 18.  by  “新・学力への挑戦”  h,p://image.space.rakuten.co.jp/lg01/94/0000136394/19/img4031544ckq36lc.jpeg
  19. 19. 危ないバグはみんなで修正•  面倒ごとはみんなで倒す– ある程度は強制力をはたらかす
  20. 20. 理想に近づけるための戦略•  CI環境の整備•  危ないバグはみんなで修正•  その警告、本当に必要?
  21. 21. その警告、本当に必要?•  一部のコードは解析対象から除外•  テストコード•  DTO(getter/setterのみ)
  22. 22. その警告、本当に必要?•  警告そのものを無効化– 参照の受け渡し•  全可変オブジェクトに防御的コピーを実装するのは非現実的– Javadoc無し•  但しサービスI/Fは除く– コンストラクタでのフィールドの初期化•  Spring Framework で DI しているのでなどなど…
  23. 23. 現在のPigg(2013年)1)  Compile2)  Unit Testing3)  Inspection4)  ReportingtrunkbranchIRCJenkinsdeveloperHook scriptfeedback
  24. 24. 課題•  IRC開いてないと通知に気付かない•  ガイドラインに沿ったコードになっているかのチェックを自動化
  25. 25. -責務の分離・可視化-Case 2:バッチ制御
  26. 26. ピグで稼働するバッチ処理•  57本(2013年6月現在)•  オンライン処理の裏側で稼働•  単発の処理がほとんど– 不要なデータの削除– ログの収集・解析 などなど…
  27. 27. 注:写真はイメージです  by  Response.jp  h,p://response.jp/imgs/zoom/255829.jpg  
  28. 28. ツギハギだらけのバッチ環境•  cron起動 & SpringBatch が混在– サービスの拡大とともに変貌した結果?•  新バッチサーバ & 旧バッチサーバ–  旧 のくせに大事な処理が野ざらし– ジョブ失敗してるのに通知来ない
  29. 29. 運用上の問題点•  ジョブの実行状況が把握しづらい–  どんなジョブが稼働してるかひと目で把握できない–  実行時間の増加傾向が掴みづらい–  異常終了が通知されない•  SpringBatch 固有の問題–  管理サーバと各ジョブが同一VM上で稼働–  ジョブが想定外の異常終了すると管理サーバごとVMが落ちる
  30. 30. Jenkinsを活用したバッチ環境JOB①JOB②…developerJenkins Batch serverü  スケジュールü  記録
  31. 31. 取り組んできたこと•  SpringBatchを捨てる–  ジョブ実行用のシンプルなFWを開発–  FWに合わせてプログラムは再作成–  バッチの制御はJenkinsに委譲–  cron起動していたジョブもJenkinsから実行•  Jenkinsでバッチを制御–  スケジューリング–  実行記録の保持
  32. 32. Jenkinsを活用したバッチ環境JOB①JOB②…developerJenkins Batch servermonü  スケジュールü  記録ü  死活監視ü  リソース監視
  33. 33. 取り組んできたこと•  Remote APIを利用したリソース監視–  キューイングされているジョブがないか–  同一ジョブの多重実行がないかジョブのチューニングのタイミングを自動的に知る
  34. 34. 現状の課題•  権限(認可)問題–  現状は社員であれば誰でもジョブの実行/停止/削除ができる
  35. 35. -同じ過ちは繰り返さない-Case 3:オペレーションの自動化
  36. 36. 前提知識:アメーバピグの運用•  2系統ある本番環境•  毎週切り替え本番系待機系LBDBOtherServiceswf
  37. 37. 前提知識:アメーバピグの運用•  2系統ある本番環境•  毎週切り替え10分メンテを実現待機系本番系LBDBOtherServiceswf本番系待機系
  38. 38. 過去に起きた障害たち•  本番/待機系でリリース物が異なってヒヤリ事件•  管理画面が the Internet に大公開事件•  実はサーバの死活監視してませんでした事件•  来週リリースのタグ切り1日早いんだった(・ω<)事件•  aなどなど…
  39. 39. 再発防止策?  cheklist  by    Alan  Cleaver  h,p://www.flickr.com/photos/alancleaver/4439276478/  再発防止策?
  40. 40. 人は同じ過ちを繰り返す•  問題点–  人間が運用するとまたミスる•  再発するとチェックリストは増える•  チェックリストのチェックリスト問題
  41. 41. モニタリングの仕組みdeveloper JenkinsGoogle Calendar APIservers (production)
  42. 42. こんなことに利用してます•  リソースの差分チェック–  サーバ間差異–  本番/待機系間差異•  リマインダ–  月金が公休の場合に警告メール送信
  43. 43. 今後の展望•  自動化できる範囲を広げる–  デプロイ&リリース–  稼動系の切り替え–  メンテナンス切り替えなどなど…
  44. 44. まとめ
  45. 45. 本日お話ししたことアメーバピグでのJenkinsケーススタディ•  コードの品質管理•  バッチ制御•  オペレーションの自動化
  46. 46. 散々語ってきましたが正直途中から入れるのめんどいからはじめから入れようぜ!
  47. 47. ご静聴ありがとうございました!

×