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.

Developer summit continuous deliveryとjenkins

7,597 views

Published on

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

Published in: Technology
  • Dating direct: ❶❶❶ http://bit.ly/36cXjBY ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Dating for everyone is here: ❶❶❶ http://bit.ly/36cXjBY ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

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

×