Jenkinsではじめる
継続的インテグレーション
そして継続的デリバリーへ
佐藤 聖規(Masanori Satoh) @lino_s
2013/06/18
自己紹介
佐藤 聖規(Masanori Satoh / @lino_s)
NTTデータ 技術開発本部 ALMソリューションセンタ
日本Jenkinsユーザ会の中の人
Linoブログ http://d.hatena.ne.jp/lino/
開発/ALMツールやクラウドの開発普及を推進中
第一部
継続的インテグレーション
皆さん、
こんなことありませんか?
手作業でミスが多発
別の環境だとビルドできない
インテグレーションテストで修正地獄に
リリース直前なのに動作しない
Jenkinsで
継続的インテグレーションを
やれば
自動化でストレスはゼロに
品質は最高に
ところで
継続的インテグレーション
って何?
1日に何度もビルドを実行し、ソフトウェアを
インテグレーションした時に発生する様々な問題を
早期に検出し、フィードバックサイクルを短くして、
ソフトウェア開発の品質と生産性を向上させる仕組み
コンパイル
インスペクション
テスト
デプロイ
CIの歴史
http://martinfowler.com/articles/continuousIntegration.html
2000年ごろXPのプラクティスの1つとして
体系化・確立された
CIはプラクティス
ツールではありません
CIやると何がうれしい?
1. 手戻りの削減
品質の維持に
つながる
通常の開発
コミット コミット … コミット コミット
テスト
大量のバグ
絡み合って
解析不能
CI開発
コミット
テスト
バグ発見
すぐ解析
すぐ修正
コミット
テスト
バグ発見
すぐ解析
すぐ修正
問題の早期発見・早期治療が命
CIはフィードバックサイクル命
2. いつでも、誰でも、
実行可能なソフトウェアが作成できる
ユーザには動くソフトウェアを提供して、信頼を
開発者は動かないかもという不安を取り除き、自信を
3. 自動化で作業コストを削減して
開発者は知的な作業に専念
4. 機械による
作業の正確さ
綿密さ
あいまい性の排除
5. 開発データを蓄積・レポートし
分析することで
継続的カイゼンができる
メリットばっかり言ってるけど、
CIやるのって大変なんじゃないの?
ビルドスクリプトの作成
ユニットテストコードの作成
インスペクションツールの設定
自動デプロイの実行
フィードバック手段の設定
ビルドマシンの購入
ビルド失敗が多発するのでは?
etc ...
CIをやらなくてもこれらの問題は発生します。
やらない理由を考えるくらいなら
さっさとやりましょう。
CIの悩みについては、
「Jenkins実践入門」
をご覧ください。
答えを書いています。
技術評論社より絶賛発売中
¥2,919
第二部
開 発 者
ソ ー ス コ ー ド 管 理 シ ス テ ム
ビ ル ド サ ー バ
コ ミ ッ ト
ソ ー ス
コ ー ド
監 視
ビ ル ド
フ ィ ー ド バ ッ ク
コ ン パ イ ル
テ ス ト
イ ン ス ペ ク シ ョ ン
ビ ル ド
レ ポ ー ト
1. インストールが簡単
jenkins-ci.orgにアクセス
クリック
>java -jar jenkins.war
localhost:8080にアクセス
コマンドすら叩きたくないGUI厨は
https://wiki.jenkins-ci.org/display/JENKINS/Meet+Jenkinsにアクセス
localhost:8080にアクセス
クリック
※JREがインストールされている必要あり
2. ブラウザで直感的操作
設定もブラウザだけ、困ったら をクリック
レポートも全部ブラウザで
ワークスペースまでブラウズ
3. 分散ビルドで大規模対応
スモールスタート
リソースが足りなくなったら
スケールアウト
4. プラグインで好きな機能を追加
言語や開発スタイルに合わせて
Jenkinsをカスタマイズ
プラグインは 400 以上!
なければ作っちゃえ!
5. オープンソース
もちろん無償
コミュニティも活発
Jenkins勉強会定期開催中
Let's go to Jenkins Community!
http://build-shokunin.org/
6. いろんな言語で使える
コマンドラインで実行できることは
何でもできる
レポートも一工夫で対応
ところでなんでJenkinsって名前?
イギリス人の執事をイメージした名前です。
以前のHudsonも執事をイメージした名前でした。
プロジェクトに優秀な執事がいるような想いが
こめられています。
Jenkinsの生みの親は日本人エンジニア
川口耕介さん @kohsukekawa
Via. 目からビーム画像ジェネレーター
第三部
Jenkinsで何をすればいい?
♪♪♪
Jenkinsはちゃんとお願いすれば
(コマンドラインでできること)なら
何でも自動化して、レポートしてくれます。
自由度が高すぎて何をお願いすれば
いいかわからない!
そんなあなたに王道パターンを
コンパイル
make, MS Build, Rake, setuptools,sbt
Gradle, gcc, javac
etc..
テスト
JUnit, CUnit, CPPUnit,
Test::Unit, RSpec,
Unittest, pyUnit
JSUnit
ワンポイント
プラグインを使うか、
JUnitのXML形式に変換
カバレッジ
Cobertura, Emma, gcov, rcov,
coverage.py, JSCoverage
インスペクション
CheckStyle, Findbugs, PMD
Coverity, PyLint,
ワンポイント
HTMLレポートはプラグインがないときは
HTML Publisher pluginを使うと幸せになれます。
デプロイ
SSH, SCP, Windowsファイル共有
WSHで頑張る。
Fabric, クラウドのRESTAPI,Vagrant
PuppetやChefを組み合わせるとベター
インテグレーションテスト
SelenuimやGUI自動テストツールを
キック
Demonstration
第四部
さぁ、JenkinsでLet's CI!
Jenkinsをうまく使うコツ
すこしずづJenkinsを育てよう
コンパイル
インスペクション
テスト
デプロイ
① ②
③ ④
画面テスト
⑤
デリバリ
⑥
3回以上単純作業で繰り返すなら
Jenkinsさんにお願いしよう
♪♪♪
Jenkinsのレポートをみて
プロジェクトを継続的カイゼン
警告数
ビルド回数
規約違反を全部つぶしたけど、根付いていない
カバレッジ
テストケース数
テストの観点をカバーしていないので
テストケースを増やしてもカバレッジがあがらない
上司をどうやって説得すればいい?
許可を求めるな謝罪せよ。
Don't ask for permission, beg for forgiveness
未来のいつか/hyoshiokの日記 より
エンジニアなら少なからず手を抜くために
自動化するはず。
Jenkinsはそのお手伝いをするだけだから
導入するのに上司の説得はそもそもいらないで
しょう。
それでも抵抗する人たちには、
「Jenkins実践入門」
1章から突破口を見出してください。
技術評論社より絶賛発売中
¥2,919
CIはプラクティス
ツールではありません
Jenkins導入して終わりではなく
毎日メインラインにコミットして
修正して、が本質です。
第五部
そして継続的デリバリーへ
継続的インテグレーションを
突き詰めていくと
商用環境デプロイも自動化できます
いわゆる継続的デプロイ
継続的デプロイ?
否、継続的デリバリーへ
ビジネスアイディアへの
迅速なフィードバックが不可欠
そのためのにCI/CDは欠かせない
皆様の成功を
お祈りしています
ご静聴ありがとうございました
このスライドの画像はstock.xchangより

Jenkinsではじめる継続的インテグレーション