jenkins勉強会 in 札幌 第一部
TRANSCRIPT
![Page 1: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/1.jpg)
Jenkins 勉強会 in 札幌
第一部id:cactusman
![Page 2: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/2.jpg)
アジェンダ• 自己紹介• CI とは• 質疑応答• Jenkins とは• 質疑応答
![Page 3: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/3.jpg)
お前だれよ• HN : cactusman (さぼてん) • 年齢: 0x1f • 出身:関西 • 所属: BeProud.inc, java-ja, Wicket-ja • 言語: Java, ( Python )• 趣味:ボドゲ―
![Page 4: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/4.jpg)
大事なことを初めに• 第四回 Jenkins 勉強会やります!– 10/15
• Jenkins 温泉やります!– 10/9-10/11
• 詳しくはググってください!
![Page 5: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/5.jpg)
CI とは
![Page 6: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/6.jpg)
CI とは• 継続的インテグレーション( Continuous
Integration )の略• XP のベストプラクティスのひとつ• システムのインテグレーション作業 を開
発の初期段階から頻繁に行う
![Page 7: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/7.jpg)
一言で言うと、頻繁にビルドし
ろ
![Page 8: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/8.jpg)
具体的には
コンパイル
UnitTest
パッケージ
結合テスト
デプロイ
システムテスト
チェックアウト
インスペクション
![Page 9: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/9.jpg)
概要図
![Page 10: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/10.jpg)
新しい概念ではない• Martin Fowler の「 Continuous
Integration 」( 2000/09/10 、最終2006/05/01 )
• JavaWorld にて特集 ( 2006/06 、角谷信太郎)
• ナイトリービルドやデイリービルドの延長線上
• 最近だと発展させて Continuous Delivery– 環境構築も含めて
![Page 11: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/11.jpg)
捕捉• CI では自動ビルドや自動テストを推奨している– 自動で実行できなければ、コストがかかり頻繁に
実行できないため• インテグレーション作業の繰り返し– 自動化は推奨しているが、必ずではない– あくまで論文ではで、現実では自動化なくしては
難しい• ツールを使ってもいい– cron でやってもいいですが、 Jenkins のような使い
やすいツールがあるので、そっち使いましょう
![Page 12: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/12.jpg)
メリット• 成果物の品質の保証– ビルドやテストが通らない、といった開発時の不具合
が先送りしにくくなり、早期発見しやすくなる– デグレートが起きにくくなる
• 手戻りコストの削減• 関心ごとの分離–自分の担当以外はとりあえず置いとく
• リソースの有効活用–マシンにできることをマシンへ
![Page 13: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/13.jpg)
デメリット• コストがかかる– 自動テスト作成、メンテナンス– 自動ビルド作成、メンテナンス– CI 専用サーバ– 結合テスト、システムテストの実行
→ そもそもある程度は必要では?
![Page 14: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/14.jpg)
Q. メリットがあるのに、なぜ広まらないのか?
![Page 15: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/15.jpg)
A. 大変だから
![Page 16: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/16.jpg)
大変な理由• 手作業があるとその都度作業が必要• SCM は必須• テストも必須• 開発途中での導入が難しい• ビルドが通らない• チームメイトに理解されない• 予算や人員を割かなければならない• etc ・・・
![Page 17: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/17.jpg)
必須事項• CI サーバ– 物理サーバ or 仮想化
• SCM– Subversion 、 Git 、 Mercurial 、 bazaar ・・・
• ビルドスクリプト– Maven2 、 Ant 、 Rake 、 Gant 、 Gradle 、・・・
• テスト– JUnit 、 TestNG 、 RSpec ・・・
![Page 18: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/18.jpg)
あるといいもの• BTS– JIRA 、 Trac 、 Redmine 、・・・
• インスペクション– FindBugs 、 Cobertura 、・・・
• XFD ( eXtreme Feedback Device )– Nabaztag 、 Ambient Orb 、・・・
![Page 19: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/19.jpg)
XFDエクストリーム・フィードバック・デバイス
![Page 20: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/20.jpg)
最近 CI ( Jenkins )は流行ってる
• CI をやるための環境がそろってきてる– Amazon EC2 などの VPS• 価格や使い勝手の点
– XP (特に TDD )の浸透• テストを書く文化
– Jenkins などのツール類の発展– ツールやノウハウが周知
![Page 21: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/21.jpg)
実際のところ• 事例などでやってることがバラバラ– Rails だと、 Java だと、・・・
• やりたいことと本当にあってるの?– なんかちょっと違う
• やってみると求められるものもバラバラ– こういうのできない?
![Page 22: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/22.jpg)
Why?
![Page 23: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/23.jpg)
みんなやってることが違うから• 言語による文化の違い
– パッケージング?なにそれおいしいの?– 静的解析? LL だよ俺ら
• 最終成果物の種類による違い– Web アプリケーション– GUI アプリ– インストーラつき
• コンテキストによる違い– 開発者– PM– QA
• 目的による違い– ビルドが壊れてるかどうか– システムテスト
![Page 24: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/24.jpg)
• 何をやるかをはっきりしましょう–みんなの頭のなかの CI は違う
• 簡単なことから始めましょう–動かしているものを見せて共通
理解を得る• 難しいことは置いておく–やれることからちょっとずつ
だから
![Page 25: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/25.jpg)
問題やパターン• こっからは CI にちなんだ問題を取り上げ
ます。• パターンについても同様に
![Page 26: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/26.jpg)
スローテスト問題• テスト実行に時間がかかりすぎる– テスト実行数の増加によるところ–非効率なテスト–依存関係• 依存している全モジュールをテスト
– システムテスト的なもの• Selenium とか
• みんないきつくところ• ビルド自体も同様
![Page 27: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/27.jpg)
解消方法• テスト自体のパフォーマンスチューニング– TDD 的なテストは捨てる– DB などはモック化
• 実行単位のスケジューリング– 早く終わるもの、価値の高いものを優先
• 実行単位を細分化– 並列性を上げる
• スケールアップ• スケールアウト(クラスタリング)
![Page 28: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/28.jpg)
狼少年問題• テストが通らない、インスペクションでの警告が常用化する
• その結果、本当に危険なアラートが上がってるのかどうか判断できなくなる–某言語で最近話題になった例のあれとか
• OSS でも割とある• 命名は id:ikikko さん
![Page 29: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/29.jpg)
解消方法• 状態を把握する
– テスト失敗や警告の増減に注目する• テストの最小化
– 変更に強いテストだけにする– TDD 的なテストは捨てる– やる必要があるかどうか常に問う
• 問題のあったところ、デグレートしたところを重点的に– バグは偏在する
• インスペクションで問題のない個所はレビュー後ignore にする
![Page 30: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/30.jpg)
Pre-Tested Commit
• コミットする前にテストを実行するパターン
• CI サーバに差分(パッチ)を送り、テストやインスペクションしてもらう
• オールグリーンならコミット、レッドならコミットできない
• TeamCity ( IntelliJ IDEA )で機能あり• Jenkins でも要望がある• DVCS で代用することも可能?
![Page 31: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/31.jpg)
質疑応答
![Page 32: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/32.jpg)
Jenkins について
![Page 33: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/33.jpg)
注意事項• 生き別れた双子の兄については、聞かない
でください
![Page 34: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/34.jpg)
注意事項• 生き別れた双子の兄については、聞かない
でください• 生き別れた双子の兄によく似た名前の
ゲーム会社についても( ry
![Page 35: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/35.jpg)
注意事項• 生き別れた双子の兄については、聞かない
でください• 生き別れた双子の兄によく似た名前の
ゲーム会社についても( ry• 信託や喰などの中二用語は避けましょう– ベルセルクなどの漫画の見過ぎです
![Page 36: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/36.jpg)
Jenkins
• OSS の CI ツール– メインコミッターは川口耕介さん
• 簡単、手軽、親切– JavaWebStart で起動– 「 java -jar jenkins.war 」起動– 好きなサーブレットコンテナにデプロイ可能– 設定は Web の画面– DB が不要
• プラグインで機能拡張• 各OS ごとにインストーラがある
– サービス(デーモン)実行は楽々• CI のデファクトになってる?
![Page 37: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/37.jpg)
Jenkins ( CI サーバ)の役割• チェックアウト• ビルドスケジュール管理• 通知• レポーティング• ログの保存
![Page 38: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/38.jpg)
![Page 39: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/39.jpg)
![Page 40: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/40.jpg)
![Page 41: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/41.jpg)
よくある誤解
Jenkins って Java 用でしょ?Java知らないと使えないんで
しょ?
![Page 42: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/42.jpg)
誤解への回答• Java は Jenkins を動かすために必要で
あって、知らないと動かせないものではない
→ よって、 Java の知識はなくてもいい• Java だけではない–sh や bat を使えるし、 plugin も豊富にあ
る→LL などでは sh をよく使っている
![Page 43: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/43.jpg)
sh や bat を使うときの注意• 環境変数、特に PATH などが通ってないた
めに動かないことがある• Jenkins としてはシンプルに sh や bat を呼び出しているだけで、環境変数などはセットしていない
• 環境変数をそろえるスクリプトを sh や bat実行の中で行い、そのあとにビルドスクリプトを実行すればいい
![Page 44: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/44.jpg)
簡単なデモ
![Page 45: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/45.jpg)
Jenkins内の概念• Job– 実行単位
• View–複数の Job を見せるもの– top ページのあれ
• User– コミット、 Jenkins の操作する人–認証と認可
![Page 46: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/46.jpg)
より高度な機能• トリガー• Plugin• Job のチェーン• CLI• クラスタリング• その他
![Page 47: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/47.jpg)
トリガーについて• Jenkins のトリガー実行– http://localhost:8080/job/hoge/build?
delay=10sec• hoge という名前の job を実行するが、 10秒間の待
ち合わせがある• 使用用途は SCM にコミット、即実行など
![Page 48: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/48.jpg)
Plugin について• 種類
– SCM– ビルドトリガー– ビルドツール– 通知– リポート– ポストビルド– ・・・
• まずは Wiki を調べましょう– こういう機能ないかな、と思ったものは結構あります– https://wiki.jenkins-ci.org/display/JENKINS/Plugins
• Plugin だけで話ができてしまうボリューム– 400 以上
![Page 49: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/49.jpg)
Job のチェーン• Job を連続して実行できる• Job の依存関係を作れる– A→B→C 、 B→D
• 何がいいのか?– フェーズを分けれる– プロジェクトの依存関係ごとにできる
![Page 50: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/50.jpg)
CLI
• Jenkins がローカルだろうが、リモートだろうが動作する
• java -jar jenkins-cli.jar [-s JENKINS_URL] command [options...] [arguments...]
• 定形処理や LL からの使用で• CLI 大好きな人は使ってください
![Page 51: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/51.jpg)
Jenkins のクラスタリングについて• マスタ / スレーブ方式– マスタは命令を出す– スレーブを命令どおりに仕事する– マスタはスレーブの結果を集める
• スレーブの設定は ssh がおすすめ– スレーブ側の ssh の設定ができていればスレーブ
エージェントを自動で送り込める• スレーブにラベルを付けれる– Windos のみや Linux のみ、実行環境のバージョン
や DB ごとなどをグループ化
![Page 52: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/52.jpg)
その他• Jenkins の設定ファイル、作業ディレクトリ– デフォルトは ${USER_HOME}/.jenkins– 環境変数 JENKINS_HOME で指定可能– 作業ディレクトリ内の詳細について
• http://d.hatena.ne.jp/masanobuimai/20110903
• Job などの設定ファイルは XML– 実態はインスタンスをシリアライズしたもの– どうしても手で書き換える必要があるな
ら、 Jenkins を落としたのちにすること• 他にも探せば便利な機能はいっぱい
![Page 53: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/53.jpg)
質疑応答
![Page 54: Jenkins勉強会 in 札幌 第一部](https://reader035.vdocuments.net/reader035/viewer/2022062513/555d780ad8b42a687b8b572b/html5/thumbnails/54.jpg)
第二部へ続く!