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