Jenkins勉強会 in 札幌<br />第一部<br />id:cactusman<br />
アジェンダ<br />自己紹介<br />CIとは<br />質疑応答<br />Jenkinsとは<br />質疑応答<br />
お前だれよ<br />HN:cactusman(さぼてん) <br />年齢:0x1f <br />出身:関西 <br />所属:BeProud.inc, java-ja, Wicket-ja<br />言語:Java, (Python)<br...
大事なことを初めに<br />第四回Jenkins勉強会やります!<br />10/15<br />Jenkins温泉やります!<br />10/9-10/11<br />詳しくはググってください!<br />
CIとは<br />
CIとは<br />継続的インテグレーション(ContinuousIntegration)の略<br />XPのベストプラクティスのひとつ<br />システムのインテグレーション作業 を開発の初期段階から頻繁に行う<br />
一言で言うと、<br />頻繁にビルドしろ<br />
具体的には<br />チェック<br />アウト<br />コンパイル<br />システム<br />テスト<br />UnitTest<br />デプロイ<br />インスペクション<br />結合テスト<br />パッケージ<br />
概要図<br />
新しい概念ではない<br />Martin Fowlerの「Continuous Integration」(2000/09/10、最終2006/05/01)<br />JavaWorldにて特集 (2006/06、角谷信太郎)<br />ナイト...
捕捉<br />CIでは自動ビルドや自動テストを推奨している<br />自動で実行できなければ、コストがかかり頻繁に実行できないため<br />インテグレーション作業の繰り返し<br />自動化は推奨しているが、必ずではない<br />あくまで...
メリット<br />成果物の品質の保証<br />ビルドやテストが通らない、といった開発時の不具合が先送りしにくくなり、早期発見しやすくなる<br />デグレートが起きにくくなる<br />手戻りコストの削減<br />関心ごとの分離<br /...
デメリット<br />コストがかかる<br />自動テスト作成、メンテナンス<br />自動ビルド作成、メンテナンス<br />CI専用サーバ<br />結合テスト、システムテストの実行<br />->そもそもある程度は必要では?<br />
Q.メリットがあるのに、なぜ広まらないのか?<br />
大変だから<br />
大変な理由<br />手作業があるとその都度作業が必要<br />SCMは必須<br />テストも必須<br />開発途中での導入が難しい<br />ビルドが通らない<br />チームメイトに理解されない<br />予算や人員を割かなければなら...
必須事項<br />CIサーバ<br />物理サーバ or 仮想化<br />SCM<br />Subversion、Git、Mercurial、 bazaar ・・・<br />ビルドスクリプト<br />Maven2、Ant、Rake、Ga...
あるといいもの<br />BTS<br />JIRA、Trac、Redmine、・・・<br />インスペクション<br />FindBugs、Cobertura、・・・<br />XFD(eXtreme Feedback Device )<b...
XFD<br />エクストリーム・フィードバック・デバイス<br />
最近CI(Jenkins)は流行ってる<br />CIをやるための環境がそろってきてる<br />AmazonEC2などのVPS<br />価格や使い勝手の点<br />XP(特にTDD)の浸透<br />テストを書く文化<br />Jenki...
実際のところ<br />事例などでやってることがバラバラ<br />Railsだと、Javaだと、・・・<br />やりたいことと本当にあってるの?<br />なんかちょっと違う<br />やってみると求められるものもバラバラ<br />こうい...
Why?<br />
みんなやってることが違うから<br />言語による文化の違い<br />パッケージング?なにそれおいしいの?<br />静的解析?LLだよ俺ら<br />最終成果物の種類による違い<br />Webアプリケーション<br />GUIアプリ<br...
だから<br />何をやるかをはっきりしましょう<br />みんなの頭のなかのCIは違う<br />簡単なことから始めましょう<br />動かしているものを見せて共通理解を得る<br />難しいことは置いておく<br />やれることからちょっと...
問題やパターン<br />こっからはCIにちなんだ問題を取り上げます。<br />パターンについても同様に<br />
スローテスト問題<br />テスト実行に時間がかかりすぎる<br />テスト実行数の増加によるところ<br />非効率なテスト<br />依存関係<br />依存している全モジュールをテスト<br />システムテスト的なもの<br />Sele...
解消方法<br />テスト自体のパフォーマンスチューニング<br />TDD的なテストは捨てる<br />DBなどはモック化<br />実行単位のスケジューリング<br />早く終わるもの、価値の高いものを優先<br />実行単位を細分化<br...
狼少年問題<br />テストが通らない、インスペクションでの警告が常用化する<br />その結果、本当に危険なアラートが上がってるのかどうか判断できなくなる<br />某言語で最近話題になった例のあれとか<br />OSSでも割とある<br /...
解消方法<br />状態を把握する<br />テスト失敗や警告の増減に注目する<br />テストの最小化<br />変更に強いテストだけにする<br />TDD的なテストは捨てる<br />やる必要があるかどうか常に問う<br />問題のあった...
Pre-TestedCommit<br />コミットする前にテストを実行するパターン<br />CIサーバに差分(パッチ)を送り、テストやインスペクションしてもらう<br />オールグリーンならコミット、レッドならコミットできない<br />T...
質疑応答<br />
Jenkinsについて<br />
注意事項<br />生き別れた双子の兄については、聞かないでください<br />
注意事項<br />生き別れた双子の兄については、聞かないでください<br />生き別れた双子の兄によく似た名前のゲーム会社についても(ry<br />
注意事項<br />生き別れた双子の兄については、聞かないでください<br />生き別れた双子の兄によく似た名前のゲーム会社についても(ry<br />信託や喰などの中二用語は避けましょう<br />ベルセルクなどの漫画の見過ぎです<br />
Jenkins<br />OSSのCIツール<br />メインコミッターは川口耕介さん<br />簡単、手軽、親切<br />JavaWebStartで起動<br />「java -jar jenkins.war」起動<br />好きなサーブレ...
Jenkins(CIサーバ)の役割<br />チェックアウト<br />ビルドスケジュール管理<br />通知<br />レポーティング<br />ログの保存<br />
よくある誤解<br />JenkinsってJava用でしょ?<br />Java知らないと使えないんでしょ?<br />
誤解への回答<br />JavaはJenkinsを動かすために必要であって、知らないと動かせないものではない<br />->よって、Javaの知識はなくてもいい<br />Javaだけではない<br />shやbatを使えるし、pluginも豊...
shやbatを使うときの注意<br />環境変数、特にPATHなどが通ってないために動かないことがある<br />Jenkinsとしてはシンプルにshやbatを呼び出しているだけで、環境変数などはセットしていない<br />環境変数をそろえるス...
簡単なデモ<br />
Jenkins内の概念<br />Job<br />実行単位<br />View<br />複数のJobを見せるもの<br />topページのあれ<br />User<br />コミット、Jenkinsの操作する人<br />認証と認可<br />
より高度な機能<br />トリガー<br />Plugin<br />Jobのチェーン<br />CLI<br />クラスタリング<br />その他<br />
トリガーについて<br />Jenkinsのトリガー実行<br />http://localhost:8080/job/hoge/build?delay=10sec<br />hogeという名前のjobを実行するが、10秒間の待ち合わせがある<...
Pluginについて<br />種類<br />SCM<br />ビルドトリガー<br />ビルドツール<br />通知<br />リポート<br />ポストビルド<br />・・・<br />まずはWikiを調べましょう<br />こういう機...
Jobのチェーン<br />Jobを連続して実行できる<br />Jobの依存関係を作れる<br />A->B->C、B->D<br />何がいいのか?<br />フェーズを分けれる<br />プロジェクトの依存関係ごとにできる<br />
CLI<br />Jenkinsがローカルだろうが、リモートだろうが動作する<br />java -jar jenkins-cli.jar [-s JENKINS_URL] command [options...] [arguments...]...
Jenkinsのクラスタリングについて<br />マスタ /スレーブ方式<br />マスタは命令を出す<br />スレーブを命令どおりに仕事する<br />マスタはスレーブの結果を集める<br />スレーブの設定はsshがおすすめ<br />ス...
その他<br />Jenkinsの設定ファイル、作業ディレクトリ<br />デフォルトは${USER_HOME}/.jenkins<br />環境変数JENKINS_HOMEで指定可能<br />作業ディレクトリ内の詳細について<br />ht...
質疑応答<br />
第二部へ続く!<br />
Upcoming SlideShare
Loading in...5
×

Jenkins勉強会 in 札幌 第一部

4,027

Published on

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,027
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
20
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

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 />
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×