Jenkins勉強会 in 札幌 第一部

54
Jenkins 勉勉勉 in 勉勉 id:cactusman

Transcript of Jenkins勉強会 in 札幌 第一部

Page 1: Jenkins勉強会 in 札幌 第一部

Jenkins 勉強会 in 札幌

第一部id:cactusman

Page 2: Jenkins勉強会 in 札幌 第一部

アジェンダ• 自己紹介• CI とは• 質疑応答• Jenkins とは• 質疑応答

Page 3: Jenkins勉強会 in 札幌 第一部

お前だれよ• HN : cactusman (さぼてん) • 年齢: 0x1f • 出身:関西 • 所属: BeProud.inc, java-ja, Wicket-ja • 言語: Java, ( Python )• 趣味:ボドゲ―

Page 4: Jenkins勉強会 in 札幌 第一部

大事なことを初めに• 第四回 Jenkins 勉強会やります!– 10/15

• Jenkins 温泉やります!– 10/9-10/11

• 詳しくはググってください!

Page 5: Jenkins勉強会 in 札幌 第一部

CI とは

Page 6: Jenkins勉強会 in 札幌 第一部

CI とは• 継続的インテグレーション( Continuous

Integration )の略• XP のベストプラクティスのひとつ• システムのインテグレーション作業 を開

発の初期段階から頻繁に行う

Page 7: Jenkins勉強会 in 札幌 第一部

一言で言うと、頻繁にビルドし

Page 8: Jenkins勉強会 in 札幌 第一部

具体的には

コンパイル

UnitTest

パッケージ

結合テスト

デプロイ

システムテスト

チェックアウト

インスペクション

Page 9: Jenkins勉強会 in 札幌 第一部

概要図

Page 10: Jenkins勉強会 in 札幌 第一部

新しい概念ではない• Martin Fowler の「 Continuous

Integration 」( 2000/09/10 、最終2006/05/01 )

• JavaWorld にて特集 ( 2006/06 、角谷信太郎)

• ナイトリービルドやデイリービルドの延長線上

• 最近だと発展させて Continuous Delivery– 環境構築も含めて

Page 11: Jenkins勉強会 in 札幌 第一部

捕捉• CI では自動ビルドや自動テストを推奨している– 自動で実行できなければ、コストがかかり頻繁に

実行できないため• インテグレーション作業の繰り返し– 自動化は推奨しているが、必ずではない– あくまで論文ではで、現実では自動化なくしては

難しい• ツールを使ってもいい– cron でやってもいいですが、 Jenkins のような使い

やすいツールがあるので、そっち使いましょう

Page 12: Jenkins勉強会 in 札幌 第一部

メリット• 成果物の品質の保証– ビルドやテストが通らない、といった開発時の不具合

が先送りしにくくなり、早期発見しやすくなる– デグレートが起きにくくなる

• 手戻りコストの削減• 関心ごとの分離–自分の担当以外はとりあえず置いとく

• リソースの有効活用–マシンにできることをマシンへ

Page 13: Jenkins勉強会 in 札幌 第一部

デメリット• コストがかかる– 自動テスト作成、メンテナンス– 自動ビルド作成、メンテナンス– CI 専用サーバ– 結合テスト、システムテストの実行

→ そもそもある程度は必要では?

Page 14: Jenkins勉強会 in 札幌 第一部

Q. メリットがあるのに、なぜ広まらないのか?

Page 15: Jenkins勉強会 in 札幌 第一部

A. 大変だから

Page 16: Jenkins勉強会 in 札幌 第一部

大変な理由• 手作業があるとその都度作業が必要• SCM は必須• テストも必須• 開発途中での導入が難しい• ビルドが通らない• チームメイトに理解されない• 予算や人員を割かなければならない• etc ・・・

Page 17: Jenkins勉強会 in 札幌 第一部

必須事項• CI サーバ– 物理サーバ or 仮想化

• SCM– Subversion 、 Git 、 Mercurial 、 bazaar ・・・

• ビルドスクリプト– Maven2 、 Ant 、 Rake 、 Gant 、 Gradle 、・・・

• テスト– JUnit 、 TestNG 、 RSpec ・・・

Page 18: Jenkins勉強会 in 札幌 第一部

あるといいもの• BTS– JIRA 、 Trac 、 Redmine 、・・・

• インスペクション– FindBugs 、 Cobertura 、・・・

• XFD ( eXtreme Feedback Device )– Nabaztag 、 Ambient Orb 、・・・

Page 19: Jenkins勉強会 in 札幌 第一部

XFDエクストリーム・フィードバック・デバイス

Page 20: Jenkins勉強会 in 札幌 第一部

最近 CI ( Jenkins )は流行ってる

• CI をやるための環境がそろってきてる– Amazon EC2 などの VPS• 価格や使い勝手の点

– XP (特に TDD )の浸透• テストを書く文化

– Jenkins などのツール類の発展– ツールやノウハウが周知

Page 21: Jenkins勉強会 in 札幌 第一部

実際のところ• 事例などでやってることがバラバラ– Rails だと、 Java だと、・・・

• やりたいことと本当にあってるの?– なんかちょっと違う

• やってみると求められるものもバラバラ– こういうのできない?

Page 22: Jenkins勉強会 in 札幌 第一部

Why?

Page 23: Jenkins勉強会 in 札幌 第一部

みんなやってることが違うから• 言語による文化の違い

– パッケージング?なにそれおいしいの?– 静的解析? LL だよ俺ら

• 最終成果物の種類による違い– Web アプリケーション– GUI アプリ– インストーラつき

• コンテキストによる違い– 開発者– PM– QA

• 目的による違い– ビルドが壊れてるかどうか– システムテスト

Page 24: Jenkins勉強会 in 札幌 第一部

• 何をやるかをはっきりしましょう–みんなの頭のなかの CI は違う

• 簡単なことから始めましょう–動かしているものを見せて共通

理解を得る• 難しいことは置いておく–やれることからちょっとずつ

だから

Page 25: Jenkins勉強会 in 札幌 第一部

問題やパターン• こっからは CI にちなんだ問題を取り上げ

ます。• パターンについても同様に

Page 26: Jenkins勉強会 in 札幌 第一部

スローテスト問題• テスト実行に時間がかかりすぎる– テスト実行数の増加によるところ–非効率なテスト–依存関係• 依存している全モジュールをテスト

– システムテスト的なもの• Selenium とか

• みんないきつくところ• ビルド自体も同様

Page 27: Jenkins勉強会 in 札幌 第一部

解消方法• テスト自体のパフォーマンスチューニング– TDD 的なテストは捨てる– DB などはモック化

• 実行単位のスケジューリング– 早く終わるもの、価値の高いものを優先

• 実行単位を細分化– 並列性を上げる

• スケールアップ• スケールアウト(クラスタリング)

Page 28: Jenkins勉強会 in 札幌 第一部

狼少年問題• テストが通らない、インスペクションでの警告が常用化する

• その結果、本当に危険なアラートが上がってるのかどうか判断できなくなる–某言語で最近話題になった例のあれとか

• OSS でも割とある• 命名は id:ikikko さん

Page 29: Jenkins勉強会 in 札幌 第一部

解消方法• 状態を把握する

– テスト失敗や警告の増減に注目する• テストの最小化

– 変更に強いテストだけにする– TDD 的なテストは捨てる– やる必要があるかどうか常に問う

• 問題のあったところ、デグレートしたところを重点的に– バグは偏在する

• インスペクションで問題のない個所はレビュー後ignore にする

Page 30: Jenkins勉強会 in 札幌 第一部

Pre-Tested Commit

• コミットする前にテストを実行するパターン

• CI サーバに差分(パッチ)を送り、テストやインスペクションしてもらう

• オールグリーンならコミット、レッドならコミットできない

• TeamCity ( IntelliJ IDEA )で機能あり• Jenkins でも要望がある• DVCS で代用することも可能?

Page 31: Jenkins勉強会 in 札幌 第一部

質疑応答

Page 32: Jenkins勉強会 in 札幌 第一部

Jenkins について

Page 33: Jenkins勉強会 in 札幌 第一部

注意事項• 生き別れた双子の兄については、聞かない

でください

Page 34: Jenkins勉強会 in 札幌 第一部

注意事項• 生き別れた双子の兄については、聞かない

でください• 生き別れた双子の兄によく似た名前の

ゲーム会社についても( ry

Page 35: Jenkins勉強会 in 札幌 第一部

注意事項• 生き別れた双子の兄については、聞かない

でください• 生き別れた双子の兄によく似た名前の

ゲーム会社についても( ry• 信託や喰などの中二用語は避けましょう– ベルセルクなどの漫画の見過ぎです

Page 36: Jenkins勉強会 in 札幌 第一部

Jenkins

• OSS の CI ツール– メインコミッターは川口耕介さん

• 簡単、手軽、親切– JavaWebStart で起動– 「 java -jar jenkins.war 」起動– 好きなサーブレットコンテナにデプロイ可能– 設定は Web の画面– DB が不要

• プラグインで機能拡張• 各OS ごとにインストーラがある

– サービス(デーモン)実行は楽々• CI のデファクトになってる?

Page 37: Jenkins勉強会 in 札幌 第一部

Jenkins ( CI サーバ)の役割• チェックアウト• ビルドスケジュール管理• 通知• レポーティング• ログの保存

Page 38: Jenkins勉強会 in 札幌 第一部
Page 39: Jenkins勉強会 in 札幌 第一部
Page 40: Jenkins勉強会 in 札幌 第一部
Page 41: Jenkins勉強会 in 札幌 第一部

よくある誤解

Jenkins って Java 用でしょ?Java知らないと使えないんで

しょ?

Page 42: Jenkins勉強会 in 札幌 第一部

誤解への回答• Java は Jenkins を動かすために必要で

あって、知らないと動かせないものではない

→ よって、 Java の知識はなくてもいい• Java だけではない–sh や bat を使えるし、 plugin も豊富にあ

る→LL などでは sh をよく使っている

Page 43: Jenkins勉強会 in 札幌 第一部

sh や bat を使うときの注意• 環境変数、特に PATH などが通ってないた

めに動かないことがある• Jenkins としてはシンプルに sh や bat を呼び出しているだけで、環境変数などはセットしていない

• 環境変数をそろえるスクリプトを sh や bat実行の中で行い、そのあとにビルドスクリプトを実行すればいい

Page 44: Jenkins勉強会 in 札幌 第一部

簡単なデモ

Page 45: Jenkins勉強会 in 札幌 第一部

Jenkins内の概念• Job– 実行単位

• View–複数の Job を見せるもの– top ページのあれ

• User– コミット、 Jenkins の操作する人–認証と認可

Page 46: Jenkins勉強会 in 札幌 第一部

より高度な機能• トリガー• Plugin• Job のチェーン• CLI• クラスタリング• その他

Page 47: Jenkins勉強会 in 札幌 第一部

トリガーについて• Jenkins のトリガー実行– http://localhost:8080/job/hoge/build?

delay=10sec• hoge という名前の job を実行するが、 10秒間の待

ち合わせがある• 使用用途は SCM にコミット、即実行など

Page 48: Jenkins勉強会 in 札幌 第一部

Plugin について• 種類

– SCM– ビルドトリガー– ビルドツール– 通知– リポート– ポストビルド– ・・・

• まずは Wiki を調べましょう– こういう機能ないかな、と思ったものは結構あります– https://wiki.jenkins-ci.org/display/JENKINS/Plugins

• Plugin だけで話ができてしまうボリューム– 400 以上

Page 49: Jenkins勉強会 in 札幌 第一部

Job のチェーン• Job を連続して実行できる• Job の依存関係を作れる– A→B→C 、 B→D

• 何がいいのか?– フェーズを分けれる– プロジェクトの依存関係ごとにできる

Page 50: Jenkins勉強会 in 札幌 第一部

CLI

• Jenkins がローカルだろうが、リモートだろうが動作する

• java -jar jenkins-cli.jar [-s JENKINS_URL] command [options...] [arguments...]

• 定形処理や LL からの使用で• CLI 大好きな人は使ってください

Page 51: Jenkins勉強会 in 札幌 第一部

Jenkins のクラスタリングについて• マスタ / スレーブ方式– マスタは命令を出す– スレーブを命令どおりに仕事する– マスタはスレーブの結果を集める

• スレーブの設定は ssh がおすすめ– スレーブ側の ssh の設定ができていればスレーブ

エージェントを自動で送り込める• スレーブにラベルを付けれる– Windos のみや Linux のみ、実行環境のバージョン

や DB ごとなどをグループ化

Page 52: Jenkins勉強会 in 札幌 第一部

その他• Jenkins の設定ファイル、作業ディレクトリ– デフォルトは ${USER_HOME}/.jenkins– 環境変数 JENKINS_HOME で指定可能– 作業ディレクトリ内の詳細について

• http://d.hatena.ne.jp/masanobuimai/20110903

• Job などの設定ファイルは XML– 実態はインスタンスをシリアライズしたもの– どうしても手で書き換える必要があるな

ら、 Jenkins を落としたのちにすること• 他にも探せば便利な機能はいっぱい

Page 53: Jenkins勉強会 in 札幌 第一部

質疑応答

Page 54: Jenkins勉強会 in 札幌 第一部

第二部へ続く!