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.

More Related Content

You Might Also Like

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

Jenkins勉強会 in 札幌 第一部

  1. 1. Jenkins勉強会 in 札幌<br />第一部<br />id:cactusman<br />
  2. 2. アジェンダ<br />自己紹介<br />CIとは<br />質疑応答<br />Jenkinsとは<br />質疑応答<br />
  3. 3. お前だれよ<br />HN:cactusman(さぼてん) <br />年齢:0x1f <br />出身:関西 <br />所属:BeProud.inc, java-ja, Wicket-ja<br />言語:Java, (Python)<br />趣味:ボドゲ―<br />
  4. 4. 大事なことを初めに<br />第四回Jenkins勉強会やります!<br />10/15<br />Jenkins温泉やります!<br />10/9-10/11<br />詳しくはググってください!<br />
  5. 5. CIとは<br />
  6. 6. CIとは<br />継続的インテグレーション(ContinuousIntegration)の略<br />XPのベストプラクティスのひとつ<br />システムのインテグレーション作業 を開発の初期段階から頻繁に行う<br />
  7. 7. 一言で言うと、<br />頻繁にビルドしろ<br />
  8. 8. 具体的には<br />チェック<br />アウト<br />コンパイル<br />システム<br />テスト<br />UnitTest<br />デプロイ<br />インスペクション<br />結合テスト<br />パッケージ<br />
  9. 9. 概要図<br />
  10. 10. 新しい概念ではない<br />Martin Fowlerの「Continuous Integration」(2000/09/10、最終2006/05/01)<br />JavaWorldにて特集 (2006/06、角谷信太郎)<br />ナイトリービルドやデイリービルドの延長線上<br />最近だと発展させてContinuousDelivery<br />環境構築も含めて<br />
  11. 11. 捕捉<br />CIでは自動ビルドや自動テストを推奨している<br />自動で実行できなければ、コストがかかり頻繁に実行できないため<br />インテグレーション作業の繰り返し<br />自動化は推奨しているが、必ずではない<br />あくまで論文ではで、現実では自動化なくしては難しい<br />ツールを使ってもいい<br />cronでやってもいいですが、Jenkinsのような使いやすいツールがあるので、そっち使いましょう<br />
  12. 12. メリット<br />成果物の品質の保証<br />ビルドやテストが通らない、といった開発時の不具合が先送りしにくくなり、早期発見しやすくなる<br />デグレートが起きにくくなる<br />手戻りコストの削減<br />関心ごとの分離<br />自分の担当以外はとりあえず置いとく<br />リソースの有効活用<br />マシンにできることをマシンへ<br />
  13. 13. デメリット<br />コストがかかる<br />自動テスト作成、メンテナンス<br />自動ビルド作成、メンテナンス<br />CI専用サーバ<br />結合テスト、システムテストの実行<br />->そもそもある程度は必要では?<br />
  14. 14. Q.メリットがあるのに、なぜ広まらないのか?<br />
  15. 15. 大変だから<br />
  16. 16. 大変な理由<br />手作業があるとその都度作業が必要<br />SCMは必須<br />テストも必須<br />開発途中での導入が難しい<br />ビルドが通らない<br />チームメイトに理解されない<br />予算や人員を割かなければならない<br />etc・・・<br />
  17. 17. 必須事項<br />CIサーバ<br />物理サーバ or 仮想化<br />SCM<br />Subversion、Git、Mercurial、 bazaar ・・・<br />ビルドスクリプト<br />Maven2、Ant、Rake、Gant、Gradle、・・・<br />テスト<br />JUnit、TestNG、RSpec・・・<br />
  18. 18. あるといいもの<br />BTS<br />JIRA、Trac、Redmine、・・・<br />インスペクション<br />FindBugs、Cobertura、・・・<br />XFD(eXtreme Feedback Device )<br />Nabaztag、 Ambient Orb 、・・・<br />
  19. 19. XFD<br />エクストリーム・フィードバック・デバイス<br />
  20. 20. 最近CI(Jenkins)は流行ってる<br />CIをやるための環境がそろってきてる<br />AmazonEC2などのVPS<br />価格や使い勝手の点<br />XP(特にTDD)の浸透<br />テストを書く文化<br />Jenkinsなどのツール類の発展<br />ツールやノウハウが周知<br />
  21. 21. 実際のところ<br />事例などでやってることがバラバラ<br />Railsだと、Javaだと、・・・<br />やりたいことと本当にあってるの?<br />なんかちょっと違う<br />やってみると求められるものもバラバラ<br />こういうのできない?<br />
  22. 22. Why?<br />
  23. 23. みんなやってることが違うから<br />言語による文化の違い<br />パッケージング?なにそれおいしいの?<br />静的解析?LLだよ俺ら<br />最終成果物の種類による違い<br />Webアプリケーション<br />GUIアプリ<br />インストーラつき<br />コンテキストによる違い<br />開発者<br />PM<br />QA<br />目的による違い<br />ビルドが壊れてるかどうか<br />システムテスト<br />
  24. 24. だから<br />何をやるかをはっきりしましょう<br />みんなの頭のなかのCIは違う<br />簡単なことから始めましょう<br />動かしているものを見せて共通理解を得る<br />難しいことは置いておく<br />やれることからちょっとずつ<br />
  25. 25. 問題やパターン<br />こっからはCIにちなんだ問題を取り上げます。<br />パターンについても同様に<br />
  26. 26. スローテスト問題<br />テスト実行に時間がかかりすぎる<br />テスト実行数の増加によるところ<br />非効率なテスト<br />依存関係<br />依存している全モジュールをテスト<br />システムテスト的なもの<br />Seleniumとか<br />みんないきつくところ<br />ビルド自体も同様<br />
  27. 27. 解消方法<br />テスト自体のパフォーマンスチューニング<br />TDD的なテストは捨てる<br />DBなどはモック化<br />実行単位のスケジューリング<br />早く終わるもの、価値の高いものを優先<br />実行単位を細分化<br />並列性を上げる<br />スケールアップ<br />スケールアウト(クラスタリング)<br />
  28. 28. 狼少年問題<br />テストが通らない、インスペクションでの警告が常用化する<br />その結果、本当に危険なアラートが上がってるのかどうか判断できなくなる<br />某言語で最近話題になった例のあれとか<br />OSSでも割とある<br />命名はid:ikikkoさん<br />
  29. 29. 解消方法<br />状態を把握する<br />テスト失敗や警告の増減に注目する<br />テストの最小化<br />変更に強いテストだけにする<br />TDD的なテストは捨てる<br />やる必要があるかどうか常に問う<br />問題のあったところ、デグレートしたところを重点的に<br />バグは偏在する<br />インスペクションで問題のない個所はレビュー後ignoreにする<br />
  30. 30. Pre-TestedCommit<br />コミットする前にテストを実行するパターン<br />CIサーバに差分(パッチ)を送り、テストやインスペクションしてもらう<br />オールグリーンならコミット、レッドならコミットできない<br />TeamCity(IntelliJ IDEA)で機能あり<br />Jenkinsでも要望がある<br />DVCSで代用することも可能?<br />
  31. 31. 質疑応答<br />
  32. 32. Jenkinsについて<br />
  33. 33. 注意事項<br />生き別れた双子の兄については、聞かないでください<br />
  34. 34. 注意事項<br />生き別れた双子の兄については、聞かないでください<br />生き別れた双子の兄によく似た名前のゲーム会社についても(ry<br />
  35. 35. 注意事項<br />生き別れた双子の兄については、聞かないでください<br />生き別れた双子の兄によく似た名前のゲーム会社についても(ry<br />信託や喰などの中二用語は避けましょう<br />ベルセルクなどの漫画の見過ぎです<br />
  36. 36. Jenkins<br />OSSのCIツール<br />メインコミッターは川口耕介さん<br />簡単、手軽、親切<br />JavaWebStartで起動<br />「java -jar jenkins.war」起動<br />好きなサーブレットコンテナにデプロイ可能<br />設定はWebの画面<br />DBが不要<br />プラグインで機能拡張<br />各OSごとにインストーラがある<br />サービス(デーモン)実行は楽々<br />CIのデファクトになってる?<br />
  37. 37. Jenkins(CIサーバ)の役割<br />チェックアウト<br />ビルドスケジュール管理<br />通知<br />レポーティング<br />ログの保存<br />
  38. 38.
  39. 39.
  40. 40.
  41. 41. よくある誤解<br />JenkinsってJava用でしょ?<br />Java知らないと使えないんでしょ?<br />
  42. 42. 誤解への回答<br />JavaはJenkinsを動かすために必要であって、知らないと動かせないものではない<br />->よって、Javaの知識はなくてもいい<br />Javaだけではない<br />shやbatを使えるし、pluginも豊富にある<br />->LLなどではshをよく使っている<br />
  43. 43. shやbatを使うときの注意<br />環境変数、特にPATHなどが通ってないために動かないことがある<br />Jenkinsとしてはシンプルにshやbatを呼び出しているだけで、環境変数などはセットしていない<br />環境変数をそろえるスクリプトをshやbat実行の中で行い、そのあとにビルドスクリプトを実行すればいい<br />
  44. 44. 簡単なデモ<br />
  45. 45. Jenkins内の概念<br />Job<br />実行単位<br />View<br />複数のJobを見せるもの<br />topページのあれ<br />User<br />コミット、Jenkinsの操作する人<br />認証と認可<br />
  46. 46. より高度な機能<br />トリガー<br />Plugin<br />Jobのチェーン<br />CLI<br />クラスタリング<br />その他<br />
  47. 47. トリガーについて<br />Jenkinsのトリガー実行<br />http://localhost:8080/job/hoge/build?delay=10sec<br />hogeという名前のjobを実行するが、10秒間の待ち合わせがある<br />使用用途はSCMにコミット、即実行など<br />
  48. 48. Pluginについて<br />種類<br />SCM<br />ビルドトリガー<br />ビルドツール<br />通知<br />リポート<br />ポストビルド<br />・・・<br />まずはWikiを調べましょう<br />こういう機能ないかな、と思ったものは結構あります<br />https://wiki.jenkins-ci.org/display/JENKINS/Plugins<br />Pluginだけで話ができてしまうボリューム<br />400以上<br />
  49. 49. Jobのチェーン<br />Jobを連続して実行できる<br />Jobの依存関係を作れる<br />A->B->C、B->D<br />何がいいのか?<br />フェーズを分けれる<br />プロジェクトの依存関係ごとにできる<br />
  50. 50. CLI<br />Jenkinsがローカルだろうが、リモートだろうが動作する<br />java -jar jenkins-cli.jar [-s JENKINS_URL] command [options...] [arguments...]<br />定形処理やLLからの使用で<br />CLI大好きな人は使ってください<br />
  51. 51. Jenkinsのクラスタリングについて<br />マスタ /スレーブ方式<br />マスタは命令を出す<br />スレーブを命令どおりに仕事する<br />マスタはスレーブの結果を集める<br />スレーブの設定はsshがおすすめ<br />スレーブ側のsshの設定ができていればスレーブエージェントを自動で送り込める<br />スレーブにラベルを付けれる<br />WindosのみやLinuxのみ、実行環境のバージョンやDBごとなどをグループ化<br />
  52. 52. その他<br />Jenkinsの設定ファイル、作業ディレクトリ<br />デフォルトは${USER_HOME}/.jenkins<br />環境変数JENKINS_HOMEで指定可能<br />作業ディレクトリ内の詳細について<br />http://d.hatena.ne.jp/masanobuimai/20110903<br />Jobなどの設定ファイルはXML<br />実態はインスタンスをシリアライズしたもの<br />どうしても手で書き換える必要があるなら、Jenkinsを落としたのちにすること<br />他にも探せば便利な機能はいっぱい<br />
  53. 53. 質疑応答<br />
  54. 54. 第二部へ続く!<br />

×