32
2012/05/29( 火) @suzukij

jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー

2012/05/29(火) @suzukij

Page 2: jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー

Jenkinsについて

デモ

CI 継続的インテグレーション

CD 継続的デリバリー

チームでの運用例

まとめ

Page 3: jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー

Jenkinsを現場で使っている人? ◦ 自動ユニットテスト

◦ 自動ビルド

◦ 自動デプロイ

Jenkinsに関する本読んだ人?

Page 4: jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー

世界で最も使われている 継続的インテグレーションツール Continuous Integration (CI) Javaで書かれたOSSのCIサーバ ◦ warファイルで提供される

導入、設定が簡単 ◦ ほぼすべての設定をブラウザから操作できる

Page 5: jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー

Cron(スケジューラ)の強化版 ◦ 人間が介在せずとも実行できるようなスクリプトを

自動で繰り返して実行し、結果を収集して表示

CIの実践をサポートするツール ◦ 高い拡張性

◦ 豊富なプラグイン(450以上)

Page 6: jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー

①公式サイトからDL

http://jenkins-ci.org/

②起動 以下コマンドのみ

java –jar jenkins.war

③ブラウザからアクセス

http://localhost:8080/

Page 7: jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー

とりあえずシンプルなデモ

①ジョブの作成

②ジョブの実行

③ジョブ結果の通知

Page 8: jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー

なんとなく分かったところで

JavaソースからJar(war)ファイルを作成するところまでをデモ

①SVNリポジトリからソースを取得 ②ユニットテスト ③ビルド(Maven) ④静的コード解析 FindBugs, PMD/CPD, CheckStyle,

Javadoc, emma

Page 9: jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー

なんとなくイメージは掴めたでしょうか?

Jenkinsでどんなことができるのか

Jenkinsを実際のプロジェクトでどう使うのか

Page 10: jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー

もともとはXPの一部の「結合テストを頻繁に実施する」という作法

ビルド、テスト、コードの品質検査など、定型的で反復可能な作業を自動化し、繰り返しこまめに実行することで省力化を図ること

自動化による省力化によって開発者が設計をしたりプログラムを書いたりというより創造的な作業に集中できるようにする全般のこと

Page 11: jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー

繰り返し実行

実行を自動化 ⇒省力化を図る

Page 12: jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー

すばやいフィードバック ◦ コミットのたびにテストやコードの品質検査をする 問題を早期発見できる 小さな修正を素早くおこなうことができる

⇒問題の発見、対応を先送りしない ⇒リリース直前まで 問題が溜め込まれるのを防ぐ

Page 13: jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー

見える化 気付ける化 ◦ ユニットテストやビルドの結果を時系列に表示

◦ コード検査/カバレッジ取得の結果をグラフで表示

⇒プロジェクトの健康状態を把握

◦ ビルド手順、テスト手順をスクリプトとして集約

⇒Jenkinsで動くもののみが管理される

⇒長ったらしい手順書が陳腐化することもない

⇒属人化を防ぐ

Page 14: jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー

以上、CIの簡単な説明です。

CIについての質問

Page 15: jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー

アジャイルマニフェストの条文

「我々がもっとも価値を置くのは、価値のあるソフトウェアを早いうちから継続的にデリバリーすることを通じて顧客を満足させることである」

なんだか難しそうだけど まず CIを通じて出来上がったモジュールをテスト環境、本

番環境へ自動でリリースできるようにし、反復可能なプロセスを構築する

Page 16: jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー

いつでも、素早く、繰り返し可能なリリース デプロイボタンを1度クリックするだけでテスト済み/

コード検証済みのモジュールが完全な状態でテスト環境や本番環境へリリースすることができる。

数秒で完了させることができる。

望むバージョンを好きな環境へ 自分の望むバージョンのアプリケーションを好きな環

境に自分でリリースできる。 問題が発生してもすぐにリリース前に状態に戻せるよ

うにする。

Page 17: jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー

リリースする権限はPJに関わるメンバに 開発者だけでなくチームに関わるメンバにリ

リースする権限を持たせる

(テスター、サポート担当者、運用担当者など)

Page 18: jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー

チーム間の作業を効率化 ◦ 各チームメンバが自身でビルドできるようになるこ

とで正しいビルドが渡されるのを待つ必要がなくなる (無駄なメールのやりとり、申請が不要に)

◦ リリースがボタンひとつで実行できる 例えば… テスター:アプリの旧バージョンと新バージョンの変更を

検証することができる とか

サポート担当者:アプリをテスト環境にデプロイし、欠陥を再現することができる とか

運用担当者:ディザスタリカバリの演習の一環としてビルドを本番環境へデプロイできる など

Page 19: jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー

リリースの負担を減らす ◦ 小さく、早いサイクルでリリースができるようになる

◦ 手順書に従ってビクビクしながら手動でリリースする必要がなくなる

◦ リリース後に問題があった場合でも容易に前の状態に戻すことができる

素早いフィードバック ◦ CIと同様のメリット

Page 20: jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー

以上、CDの簡単な説明です。

CDについての質問

Page 21: jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー

実行までを自動化 (主にビルド、デプロイ) ◦簡単に実行できるようにする ◦何度も繰り返せるようにする ◦手順やルールをJenkinsに寄せる 属人化を防ぐ ○○さんしか知らない作業 更新されていない手順書

↑×ダメ絶対

Page 22: jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー

素早くこまめに ◦統合の間隔は短く、小さく

◦問題の早期発見、早期対応

◦統合に関連するリスクを減らす

Page 23: jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー

ビルド、デプロイ作業のような単純で面倒で面白くない

タンポポワークは

Jenkinsさんに任せてしまえ

結果だけを教えてもらおう

Page 24: jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー

以上、駆け足でJenkinsとCI、CDについて簡単に説明させてもらいました。 CI、特にCDはプロジェクトチーム全体に関わることなので現実にはなかなか難しいと思います。 ですが日頃から各プロセスについて改善を続けていけば少しずつ導入できると思っています。 (CI、CDは少しずつ一歩一歩が重要)

Page 25: jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー

初めての自動化には大きな痛みが伴いますが受ける恩恵は計り知れないくらい大きいです。 2年以上CIを実践しているものの、いまだにイケていないところがたくさんあるのですが導入する価値は大いにあると思っています。

Page 26: jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー

みなさんもJenkinsを使ってCI、CDに取り組んでみてはいかがでしょうか?

Jenkinsを使った作業の自動化はすぐに個人でも始めることができます。

まずはローカルで動かしてみませんか?

Page 27: jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー

以上、ご静聴ありがとうございました。

Page 28: jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー

■日程

2012/07/29(日) 11:30 – 17:30

■場所

法政大学 市ヶ谷キャンパス

http://connpass.com/event/467/

Page 29: jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー

おすすめの書籍

Jenkins実践入門 ビルド・テスト・デプロイを自動化する技術

Jenkins(カエル本)

継続的デリバリー

Page 30: jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー

ビルド ◦ Ant (ActionScriptをビルド→swf)

◦ Maven(Javaビルド→war、ユニットテスト、JavaDoc生成)

コードの品質検査

◦ PMD/CPD(コードの重複、コピペ、DRY原則のチェック)

◦ FindBugs(潜在バグのチェック)

◦ CheckStyle(コーディングルールのチェック)

◦ タスクのチェック(ソースの ”TODO” や ”FIXME” を検出)

テスト ◦ JUnit(ユニットテストの実行)

◦ Cobertura(テストカバレッジの取得)

Page 31: jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー

DB環境構築(Oracle10, 11, Postgres8, 9, SQLServer2005, 2008) ◦ テスト環境DBのテーブルをドロップ、作成、マスタ登録、テストデータ登録

デプロイ(Tomcat6, 7, WebSphere8) ◦ Deploy(APサーバへのデプロイ、アプリ再起動)

テスト環境に対してAPIのテスト(AP, DBの上記組み合わせ)

◦ AP 6 * DB 3 = 18パターン

◦ JUnitを実行し、テスト環境に対してHTTPリクエスト、期待するレスポンスのXMLが返ってくるか検証

通知 ◦ メール通知(各ジョブが失敗した時のみ結果を通知)

◦ IRCプラグイン(各ジョブが完了した時に結果を通知)

Page 32: jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー

その他 ツール系 ◦ テスト環境のヘルスチェック(スケジュールで5分おき)

◦ バックアップ(スケジュールで毎日)

◦ ER図をもとにDB定義書.xls、DB定義.htmlを生成(ワンクリック)