Developer summit continuous deliveryとjenkins

7,058 views

Published on

デベロッパーサミット 2012での発表です。

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

No Downloads
Views
Total views
7,058
On SlideShare
0
From Embeds
0
Number of Embeds
1,278
Actions
Shares
0
Downloads
138
Comments
0
Likes
14
Embeds 0
No embeds

No notes for slide
  • 風呂敷を広げて、どうしてCIが一過性のブームではなくて本質的なものなのかを説明したい。
  • 10000もスレッドがあったら今までの使い方では使い切れないしかも値段は安くなっている。性能比ではなおさら。
  • 付加価値の高い商売をしないと
  • 「計算機の活用」という大きな流れの現れの一つ
  • (ゴミ箱)VMのスナップショット・フォークデバッグするために横によけておく
  • スローテストの問題とか
  • 自動化の流れは開発ツールでも。
  • 各種のサービスをソフトウェア開発に組み込んでいくためには絶好のプラットフォームになっている
  • さっき散々サーバを使いこなすことが重要だという話をした。<<スライド>>それはCIが無価値だということではないが、もっと活用できるポテンシャルがあるのにいかせていない
  • ふるいにかけて無駄なテストを走らせない
  • 三種の神器:この組み合わせからvalueを引き出すツールを書いていきたい
  • Developer summit continuous deliveryとjenkins

    1. 1. Continuous DeliveryとJenkins川口耕介 ©2010 CloudBees, Inc. All Rights Reserved
    2. 2. 川口耕介って誰?• Jenkinsクリエイター&プロジェクトリー ド• アーキテクト @ CloudBees• その前は… – RELAX – JAXB, JAX-WS, JAXP等 @ Sun Microsystems – GlassFish v3のモジュールレイヤの一部など – FreeTrain ©2010 CloudBees, Inc. All Rights 2 Reserved
    3. 3. jenkins-ci.org• JavaによるCIサーバ/OSS• 7年位やっている• 使うのが簡単• プラグインによる機能拡張 – 現在 450+• 世界中で広く普及 – インストールベース: 31K+ ©2010 CloudBees, Inc. All Rights 3 Reserved
    4. 4. ©2010 CloudBees, Inc. All Rights 4 Reserved
    5. 5. ©2010 CloudBees, Inc. All Rights 5 Reserved
    6. 6. Sparc ロードマップ ©2010 CloudBees, Inc. All Rights 6 Reserved
    7. 7. 計算能力の向上• 計算能力はどんどん増える• 計算能力はどんどん安くなる• 計算能力の費用対効果が上がる• 開発者の費用対効果は変わらない• ソフトウェア産業では ますます計算機の効率よい活用が重要に ©2010 CloudBees, Inc. All Rights 7 Reserved
    8. 8. Photo by skreuzer©2010 CloudBees, Inc. All Rights 8 Reserved
    9. 9. クラウド・仮想計算機• VMWare, Xen, KVM, …• EC2, Rackspace• 見かけのマシン数はどんどん増える• シングルシステムイメージの恩恵は受け られない ©2010 CloudBees, Inc. All Rights 9 Reserved
    10. 10. 聖徳太子も七台まで ©2010 CloudBees, Inc. All Rights 10 Reserved
    11. 11. ©2010 CloudBees, Inc. All Rights 11 Reserved http://www.flickr.com/photos/19188303@N02/4801131166/
    12. 12. クラウド・仮想計算機• VMは計算機をスライスするだけではな い• プロビジョニングのリアルタイム化・自 動化 – テンポラリ計算機 • テスト実行毎に独立したクローンを用意 – QAからプロダクションに再配備の必要なし ©2010 CloudBees, Inc. All Rights 12 Reserved
    13. 13. デプロイメントモデルへの影響 ロードバラン サ App v7 Building Cloud Tools for NetFlix: http://www.slideshare.net/joesondow/building-cloudtoolsfornetflix-9419504 ©2010 CloudBees, Inc. All Rights 13 Reserved
    14. 14. デプロイメントモデルへの影響 ロードバラン サ App v7 App v8 ©2010 CloudBees, Inc. All Rights 14 Reserved
    15. 15. デプロイメントモデルへの影響 ロードバラン サ App v7 App v8 ©2010 CloudBees, Inc. All Rights 15 Reserved
    16. 16. デプロイメントモデルへの影響 ロードバラン サ App v7 App v8 ©2010 CloudBees, Inc. All Rights 16 Reserved
    17. 17. デプロイメントモデルへの影響 ロードバラン サ App v7 App v8 ©2010 CloudBees, Inc. All Rights 17 Reserved
    18. 18. デプロイメントモデルへの影響 ロードバラン サ App v7 ©2010 CloudBees, Inc. All Rights 18 Reserved
    19. 19. クラウド・仮想計算機• 小さなスケールで並列化を奨励する コストモデル 台数 台数 時間 時間 ©2010 CloudBees, Inc. All Rights 19 Reserved
    20. 20. とにかく横に並べればよい• スローテスト? ©2010 CloudBees, Inc. All Rights 20 Reserved
    21. 21. あらゆる階層でテストの並列実行• 複数スレッドで – 拙作 parallel-junit – TestNGとか• 複数プロセスで – 拙作 Maven JUnit plugin – Maven Surefire• 複数マシンで – マトリックスプロジェクト ©2010 CloudBees, Inc. All Rights 21 Reserved
    22. 22. クラウド・仮想計算機:再び• 自動化への更なる拍車 – EC2 → RightScale – Chef, Puppet• ミドルウェア・ツールなどのインストー ルも非対話的に – 複雑な自動化がより簡単になる ©2010 CloudBees, Inc. All Rights 22 Reserved
    23. 23. 開発ツールの自動化の進展• 非対話的ビルド – Visual Studio → MSBuild• 実行結果を機械可読にする – CVS → Subversion – テストレポート• 今や対話モードonlyなど考えられない ©2010 CloudBees, Inc. All Rights 23 Reserved
    24. 24. 開発ツールの自動化は今後も続く• インストールの自動化• 実行経過の機械可読化 – 構造化・多層化 [INFO] ------------------------------------------------------------------------ [INFO] Building Test harness for Jenkins and plugins 1.406-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ jenkins-test-harness --- [INFO] Deleting /home/kohsuke/ws/jenkins/jenkins/test/target [INFO] [INFO] --- maven-enforcer-plugin:1.0:enforce (default) @ jenkins-test-harness --- [INFO] [INFO] --- maven-enforcer-plugin:1.0:display-info (default) @ jenkins-test-harness --- [INFO] Maven Version: 3.0.1 [INFO] JDK Version: 1.6.0_20 normalized as: 1.6.0-20 [INFO] OS Info: Arch: amd64 Family: unix Name: linux Version: 2.6.32-31-generic [INFO] [INFO] --- maven-remote-resources-plugin:1.0:process (default) @ jenkins-test-harness --- [INFO] [INFO] --- maven-resources-plugin:2.4.3:resources (default-resources) @ jenkins-test-harness --- [INFO] Using UTF-8 encoding to copy filtered resources. [INFO] Copying 12 resources [INFO] [INFO] --- gmaven-plugin:1.0-rc-5-patch-2:execute (preset-packager) @ jenkins-test-harness --- [INFO] [INFO] --- maven-stapler-plugin:1.15:apt-compile (default-apt-compile) @ jenkins-test-harness --- [INFO] Compiling 46 source files to /home/kohsuke/ws/jenkins/jenkins/test/target/classes Note: Generating org/jvnet/hudson/test/ExtractChangeLogParser/FileInZip.javadoc Note: Generating org/jvnet/hudson/test/ExtractChangeLogParser/ExtractChangeLogEntry.javadoc Note: Generating org/jvnet/hudson/test/ClosureExecuterAction/doIndex.stapler Note: Some input files use or override a deprecated API. Note: Recompile with -Xlint:deprecation for details. ©2010 CloudBees, Inc. All Rights 24 Reserved
    25. 25. 開発ツール自動化の天王山 ©2010 CloudBees, Inc. All Rights 25 Reserved
    26. 26. SaaSの台頭• Sauce OnDemand – レンタルSelenium ©2010 CloudBees, Inc. All Rights 26 Reserved
    27. 27. SaaSの台頭: deviceAnywhere ©2010 CloudBees, Inc. All Rights 27 Reserved
    28. 28. SaaSの台頭: CloudBees DEV@cloud• Jenkins as a Service ©2010 CloudBees, Inc. All Rights 28 Reserved
    29. 29. SaaSの台頭• プロビジョニングも急速・簡単・自動• Just-in-time化• 従量制料金モデル 台数 台数 時間 時間 ©2010 CloudBees, Inc. All Rights 29 Reserved
    30. 30. 開発環境をとりまく大きな流れ• 過剰ともいえる計算能力 – 物理的制約・コストモデルから並列化へ• 色々な人のおかげで自動化が簡単に – 計算機群、計算機、OS、ミドルウェア、ツー ル – クラウドで、VMで、SaaSで• 執事が必要 – 多くのサービスと潤沢な計算機を指揮する執 事が ©2010 CloudBees, Inc. All Rights 30 Reserved
    31. 31. ©2010 CloudBees, Inc. All Rights 31 Reserved
    32. 32. Jenkinsは分散ビルドに対応して5年• 100+の計算機とその利用状況を把握する 基盤がある• 多数の計算機にまたがってプラグインを 実行する仕組みがある ©2010 CloudBees, Inc. All Rights 32 Reserved
    33. 33. コミットの検証済みマージありあまる計算機を使いこなす方法:その1 ©2010 CloudBees, Inc. All Rights ©2010 CloudBees, Inc. All Rights Reserved Reserved
    34. 34. CIのジレンマ• CIでローカルの仕事がサーバに移った? – コミットをしないとJenkinsにテストしても らえない – でもコミットが壊れていたらみんなに迷惑 が掛かる – サーバでテストしたいのにローカルでテス トする羽目に ©2010 CloudBees, Inc. All Rights 34 Reserved
    35. 35. 大規模プロジェクトのジレンマ開発者が問題のあるコミットをする確率が一定なら、チームが大きくなる程何かの問題が生じる確率は限りなく100%に近づく100%80%60%40%20% 0% 0 5 10 15 20 ©2010 CloudBees, Inc. All Rights 35 Reserved
    36. 36. 解決:検証済みマージ• 開発者はブランチにコミットする• Jenkinsがブランチをテストする• OKならばJenkinsがトランクにマージす る開発者1開発者2トランク ©2010 CloudBees, Inc. All Rights 36 Reserved
    37. 37. 恐れることなかれ!• 実際にはせいぜいこんな感じ – rebaseを使えばtrunkからあまり外れない – コードを書くペースはテスト実行よりずっ と遅い ©2010 CloudBees, Inc. All Rights 37 Reserved
    38. 38. 利点• 間違いをしても他人に影響しない – 気軽にコミットできる• テストはサーバで走る – 大規模なテストや環境依存のテストも• テストは非同期に走る – 満足する変更をしたら、すぐ次の作業へ – テスト実行待ち時間なし ©2010 CloudBees, Inc. All Rights 38 Reserved
    39. 39. 検証済みマージを階層化• JavaSE, NetBeansはこれに近い master repo team team team repo repo repo ©2010 CloudBees, Inc. All Rights 39 Reserved
    40. 40. やりかたの詳細• Subversion Merge Plugin• Git Plugin• Gerrit Plugin ©2010 CloudBees, Inc. All Rights 40 Reserved
    41. 41. デプロイメントの自動化ありあまる計算機を使いこなす方法:その2 ©2010 CloudBees, Inc. All Rights ©2010 CloudBees, Inc. All Rights Reserved Reserved
    42. 42. 要するに…ビルドができた らどこかで動かそ う というこ と ©2010 CloudBees, Inc. All Rights 42 Reserved
    43. 43. デプロイされる前に検証• コンパイルが通った ≠ デプロイしてもよ い• そこでパイプライン – 徐々に大掛かりなテストを実行 – 失敗したらそこでストップ – ふるいに掛けて無駄なテストをしない Unit Build Int. Test Staging UAT Test ©2010 CloudBees, Inc. All Rights 43 Reserved
    44. 44. パイプラインの作り方:その1• ウォーターフォールモデル ビルド 結合テスト 品質検査• 上流・下流プロジェクトで繋ぐ• 実行可能プログラムをコピーする デプロイ ©2010 CloudBees, Inc. All Rights 44 Reserved
    45. 45. 流れ 時間ビルド ビルド ビルド ビルド ビルド ビルド 結合テスト 結合テスト 結合テスト デプロ デプロイ イ ©2010 CloudBees, Inc. All Rights 45 Reserved
    46. 46. ビルドパイプライン・プラグイン ©2010 CloudBees, Inc. All Rights 46 Reserved
    47. 47. Promoted Buildsプラグイン• プロセスフローではなく状態遷移を考え る – 状態遷移の必要条件を考える 品質検査 ビルド合格 試験運用済 合格 • コンパイル成功 • カバレッジ 60%以 • UAT環境で三日以 • ユニットテスト通 上 上動作 過 • 結合テスト通過 ©2010 CloudBees, Inc. All Rights 47 Reserved
    48. 48. 昇進モデルの利点• 非同期 – 並列処理・リトライ可能性• 枝分かれしたりと柔軟な形• 安定的 – 昇進条件の詳細の調整が簡単 – チームとチームの境界はデータなので• トリガの呪縛からの解放 – 契機になるイベントは何でもよい ©2010 CloudBees, Inc. All Rights 48 Reserved
    49. 49. 追跡可能性 (traceability) ©2010 CloudBees, Inc. All Rights ©2010 CloudBees, Inc. All Rights Reserved Reserved
    50. 50. ©2010 CloudBees, Inc. All Rights 50 Reserved
    51. 51. 機械による追跡可能性 • システム間に散在する情報を機械で追跡 – Dev: コミットID – QA: バグID – QA: テストの実行記録 – Op: デプロイの記録、現在実行中のバージョ ン ©2010 CloudBees, Inc. All Rights©2010 CloudBees, Inc. All Reserved 51
    52. 52. CIサーバは三界の架け橋• ソースコードはcommit IDで識別する• バイナリはチェックサムで識別する – Jenkinsではfingerprintと呼んでいる• バイナリを使うたびにチェックサムを取 る – テストで – 運用で – 統合先で• 「名寄せ」する ©2010 CloudBees, Inc. All Rights 52 Reserved
    53. 53. 追跡可能性とパイプライン 時間 1a5d a820 83ad 2f03 02d9 ecdaビルド ビルド ビルド ビルド ビルド ビルド 1a5d 83ad 2f03 結合テスト 結合テスト 結合テスト 1a5d 2f03 デプロ デプロイ イ ©2010 CloudBees, Inc. All Rights 53 Reserved
    54. 54. フィンガープリントの活用 ©2010 CloudBees, Inc. All Rights 54 Reserved
    55. 55. バイナリインテグレーションの奨め• バイナリをリビルドしない – 時間の節約 – 追跡性の向上 – 環境による差異の排除 ©2010 CloudBees, Inc. All Rights 55 Reserved
    56. 56. 余談:分散バイナリリポジトリ• 「コミットと共有の分離」 @ 分散VCS• 同じ事がバイナリについても言える – Maven snapshotをパイプライン的に使う? – リリースが先か、検証が先か• 歴史は繰り返す ©2010 CloudBees, Inc. All Rights 56 Reserved
    57. 57. 自動化による相乗効果 ©2010 CloudBees, Inc. All Rights 57 Reserved
    58. 58. 三種の神器 →新・三種の神器• ビルドスクリプト • デプロイスクリプト• バージョン管理 • XaaS• 自動化されたテスト • クラウド 相乗効果が個々の投資を正当化する ©2010 CloudBees, Inc. All Rights 58 Reserved
    59. 59. まとめ• 計算能力は湯水のように使える ようになる – とにかく横に並べる• ソフトウェア開発でも計算能力の新しい 活用の仕方が求められている• 色々な技術の流れが後押ししている – クラウド、仮想計算機、分散VCS、自動化• Jenkinsはこういうニーズを吸収していく ©2010 CloudBees, Inc. All Rights 59 Reserved
    60. 60. ©2010 CloudBees, Inc. All Rights Reserved
    61. 61. ©2010 CloudBees, Inc. All Rights 61 Reserved
    62. 62. 計算能力の向上• 今時のXeon: 1MB L2 cache – PC-98シリーズ: メインメモリ 640KB• “Your cell phone has more computing power than NASA back in 1969”• PlayStation today has more computing power than military super computer of 1997 ©2010 CloudBees, Inc. All Rights 62 Reserved
    63. 63. 他にも色々な実装が考えられる• 中間サーバ方式 – 開発者はCIサーバへプッシュ – CIサーバがテスト結果に応じて中央へプッ シュ ©2010 CloudBees, Inc. All Rights 63 Reserved
    64. 64. SaaSの台頭 ©2010 CloudBees, Inc. All Rights 64 Reserved
    65. 65. SaaSの台頭: SOASTA ©2010 CloudBees, Inc. All Rights 65 Reserved
    66. 66. 次っていうのはどっち?• 品質検査• ワークフロー• 大規模インスタンス の管理• 検証済みマージ … ©2010 CloudBees, Inc. All Rights 66 Reserved
    67. 67. 水平並列化• Rackspace 56,000• 1&1 Internet 70,000• Facebook 70,000• Google 1,000,000 (?)• Microsoft, Amazon, Yahoo, IBM, … ©2010 CloudBees, Inc. All Rights 67 Reserved
    68. 68. 複数のマシンに跨るジョブを作る• 例:負荷テスト 同期: 準備完了 サーバ クライアント #1 クライアント #2 クライアント #3 クライアント #4 ©2010 CloudBees, Inc. All Rights 68 Reserved
    69. 69. Dist-fork: 分散スクリプティング基盤• Jenkinsから一時的に計算機を借りる – マシン名に依存しないsshのようなもの $ java -jar jenkins-cli.jar dist-fork -l linux uname -a – ファイルをコピーしたりも• 用途 – OS別のインストーラの作成 – 負荷テスト ©2010 CloudBees, Inc. All Rights 69 Reserved
    70. 70. 更に一歩進めて• 長く借りておく $ jenkins dist-fork-lease -l linux –n node1 … $ jenkins dist-fork –n node1 ./doSomething.sh … $ jenkins dist-fork –n node1 ./doMore.sh• 後片付けはJenkinsに任せる ©2010 CloudBees, Inc. All Rights 70 Reserved
    71. 71. 更に一歩進めて• Antタスクにしたり<jenkins:parallel degree=“3” name=“slave”> <jenkins:copy2slave dir=“.” includes=“lib/*.jar”/> <junit /> <jenkins:copy2master dir=“.” includes=“reports/*.xml”/></jenkins:parallel> ©2010 CloudBees, Inc. All Rights 71 Reserved
    72. 72. 更に一歩進めて• Groovyスクリプトにしたり def jpool = new Jenkins().pool; [1..10].eachParallel { jpool.allocateSlave { // この部分はスレーブ上で実行される } } ©2010 CloudBees, Inc. All Rights 72 Reserved
    73. 73. あらゆる階層でテストの並列実行• 複数スレッドで – 拙作 parallel-junit – TestNGとか• 複数プロセスで – 拙作 Maven JUnit plugin – Maven Surefire• 複数マシンで – マトリックスプロジェクト ©2010 CloudBees, Inc. All Rights 73 Reserved
    74. 74. Jenkinsの持つ情報を活用してテストを実行• 実行順序制御 – 前回失敗したテストから – 費用対効果の高いテストから• 失敗時により多くの情報を集める – 非対話性デバッガ YouDebug – メモリダンプ・スレッドダンプ ©2010 CloudBees, Inc. All Rights 74 Reserved
    75. 75. Selenium?• Auto pointerのようなもの• 仮想ディスプレイじゃなくヘッドレスで• プロセスに埋め込んで• プロクシ偽装でなくデータにアクセス• コンソールのリダイレクト• レイアウトの機械可読化• Fault injection ©2010 CloudBees, Inc. All Rights 75 Reserved
    76. 76. Jenkinsの持つ情報を活用してテストを実行• 実行順序制御 – 前回失敗したテストから – 費用対効果の高いテストから• 失敗時により多くの情報を集める – 非対話性デバッガ YouDebug – メモリダンプ・スレッドダンプ ©2010 CloudBees, Inc. All Rights 76 Reserved
    77. 77. 分散VCS ♥• コミットと共有の概念が分離している – Subversion = 全員と共有 or 誰とも共有しな い – これを利用して明示的にブランチ操作をし なくても検証済みマージができてしまう• 開発の動機は違うがCIには相性が良い – 分散・並列の時代にあっている ©2010 CloudBees, Inc. All Rights 77 Reserved
    78. 78. 自動化のバウンダリを広げよう• 開発者の世界に起こったこと(CI)をその 外側へ適用しよう• 左からコードをコミットしたら右からア プリが出てくる仕組みを作ろう ©2010 CloudBees, Inc. All Rights 78 Reserved

    ×