• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Developer summit   continuous deliveryとjenkins
 

Developer summit continuous deliveryとjenkins

on

  • 6,020 views

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

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

Statistics

Views

Total Views
6,020
Views on SlideShare
4,998
Embed Views
1,022

Actions

Likes
14
Downloads
136
Comments
0

9 Embeds 1,022

http://d.hatena.ne.jp 975
http://orangeclover.hatenablog.com 26
http://s.deeeki.com 6
http://us-w1.rockmelt.com 5
http://tweetedtimes.com 5
https://twitter.com 2
http://paper.li 1
https://twimg0-a.akamaihd.net 1
https://si0.twimg.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

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

Developer summit   continuous deliveryとjenkins Developer summit continuous deliveryとjenkins Presentation Transcript

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