SlideShare a Scribd company logo
Jenkinsで
Java/PHP/Ruby/JavaScript
をビルドするをビルドする
Web技術勉強会 2012/01/14
Ryuichi TANAKA(@mapserver2007)
CI(継続的インテグレーション)
• 品質を継続的に確保するための手法
• XP(エクストリームプログラミング)の一つ
• ビルド、テスト、インスペクションを継続的に自
動的に実施動的に実施
• CIをサポートする言語、ツールが増えつつあ
る
Point of SalesとPoint of Use
http://www.sonicgarden.jp/
Point of Sales
• Point of Sales
– システム、アプリを売った時点が最高品質
– ウォーターフォールモデルで主に発生
– それ以降は品質が低下し続ける– それ以降は品質が低下し続ける
• 品質低下を防ぐために保守対応、障害対応が待っている
• 瑕疵担保期間が過ぎると品質低下を許容したまま使い続
けるケースがありすぎて…
– 古来からのSI手法
• 良くないことはわかりつつも現実問題、Point of Salesになら
ざるを得ないケースがほとんど
Point of Use
• Point of Sales
– 現在が常に最高品質
– アジャイル開発モデル
– ツールなどを駆使して可能な限り自動化することが
常識な世界常識な世界
• テスト、ビルド、デプロイ、CIなど。人間による試験以外は自
動化
– Webサービス運用で適用されること
• システムを育てていくという観点
• システムを他社に売るわけではないので可能だったり
• 現実問題、SIerに適用するのはなかなかハードルが高い
– 永和システムマネジメントはSierながら実践
CIをやる意味
• 効率的な開発プロセスを学ぶ
– 手元の環境だけではなく、共通の環境(サーバ)場
でテスト、ビルド
– レポートが可視化される– レポートが可視化される
– なにかあったら(デグレードなど)すぐ分かる
• 品質向上の意識が高まる
– 否応なしにグラフ化される
– 結果を青くしたい欲求
Jenkinsとは
• 最も人気のあるCI(継続的インテグレーション)
ツール
• 豊富なプラグイン
• 開発者は日本人• 開発者は日本人
• Java製
Jenkinsでやるべきこと
• 必須
– ユニットテスト
• やれたらやりたい
– 糞コードチェック– 糞コードチェック
• PMD, CheckStyle, CPD
– カバレッジ
• やってもやんなくてもいい
– メール通知、Growl通知
Javaプロジェクトをビルド
• 省略
– そこいらに情報があるので調べてくれ。腐るほど
ある。
PMDとかCheckStyleは面倒なんでやってません。ガチで作るときは
ちゃんとルールの定義からやりましょう。
PHPプロジェクトをビルド
• PHPもJava並にビルド環境が揃ってる
• しかも情報がそれなりに豊富
– Javaには及ばないが
• PMD、CPDなども実用レベルなのでPHPと• PMD、CPDなども実用レベルなのでPHPと
Jenkinsはかなり相性がいいのではないか
PHPMD
• PHP版PMD
– バグがありそうなところやコード的におかしい部分を
ソースレベルで指摘してくれる。
• 黄色
– 弱い警告。結構出る。– 弱い警告。結構出る。
– 全部直すのはけっこうきつい。
– 個人的には目をつぶる
• 赤
– 強い警告。あまり出ない。
– これは直すべき。
インストール
$> sudo pear install phpunit/phpcpd$> sudo pear install phpunit/phpcpd
PHPCPD
• コード重複をチェックする
– 例えば同じようなif文が連発する、など
• 閾値で調整できる
• 普通に書いていればまず出ない• 普通に書いていればまず出ない
インストール
$> sudo pear install phpmd/PHP_PMD$> sudo pear install phpmd/PHP_PMD
PHPUnit
• ご存知ユニットテストフレームワーク
– 他のFWでもいけるかもしれないが、PHPUnitが一
番無難で楽
インストール
$> sudo pear install phpunit/PHPUnit$> sudo pear install phpunit/PHPUnit
Phing
• PHP版Ant
– Antと使い方もほとんど同じ
• Phing+build.xmlでビルド
• サンプル• サンプル
– https://gist.github.com/1589175
Web技術勉強会 20120114 - JenkinsでJava/PHP/Ruby/JavaScriptをビルドする
Jenkinsでビルドするには
• レポートファイルが必要
• build.xmlを使うと以下のファイルが生成され
る(名前は独自に変更可能)
– pmd.xml– pmd.xml
– cpd.xml
– phpunit.xml
• これらをJenkinsに食わせる
– [ジョブ]->[設定]でレポートファイルを指定する
Web技術勉強会 20120114 - JenkinsでJava/PHP/Ruby/JavaScriptをビルドする
Web技術勉強会 20120114 - JenkinsでJava/PHP/Ruby/JavaScriptをビルドする
Web技術勉強会 20120114 - JenkinsでJava/PHP/Ruby/JavaScriptをビルドする
Rubyプロジェクトをビルド
• 情報がほとんどない
• 実戦投入するのはきついかも
– 特にRails
• 今のところRspec/TestUnitで自動テストするこ• 今のところRspec/TestUnitで自動テストするこ
としかできていない
– 知らないだけの可能性あり
• JUnit形式でレポート吐ければ終わり
RubyプロジェクトをJenkisビルド
• 用意するもの
– ci-reporter
• gem install ci-reporter
– Rakefile– Rakefile
• Jenkinsから呼び出す
• テスト
– RSpec
– Test::Unitでもいける
Rakefileでビルド
・Rakefile
require 'rspec/core/rake_task'
require 'ci/reporter/rake/rspec'
RSpec::Core::RakeTask.new(:spec => ["ci:setup:rspec"]) do |t|
t.pattern = '**/*_spec.rb't.pattern = '**/*_spec.rb'
end
Web技術勉強会 20120114 - JenkinsでJava/PHP/Ruby/JavaScriptをビルドする
Web技術勉強会 20120114 - JenkinsでJava/PHP/Ruby/JavaScriptをビルドする
JavaScriptプロジェクトをビルド
• 情報はほとんどない
• しかも何パターンかある
– JsUnit、mocha、QUnit etc.
• しかし、結局はテストしてJUnit形式のxml吐か• しかし、結局はテストしてJUnit形式のxml吐か
せることさえできればいいことに気づいたら
あっさりできた
• まさかJSの自動テスト、ビルドにJavaとPerlが
必要とは。
JavaScriptでJenkinsビルドする手順
• 用意するもの
– node.js
– QUnit
• https://github.com/jquery/qunit• https://github.com/jquery/qunit
– QUnit-TAP
• npm install qunit-tap
– TAP::Harness::JUnit
• install TAP::Harness::Junit
コマンドで実行
prove --ext=test.js --exec=node -l test --harnessprove --ext=test.js --exec=node -l test --harness
TAP::Harness::JUnit
Antで実行
ant runant run
Antで実行
ant runant run
Antスクリプト
• https://gist.github.com/1609681
Web技術勉強会 20120114 - JenkinsでJava/PHP/Ruby/JavaScriptをビルドする
Web技術勉強会 20120114 - JenkinsでJava/PHP/Ruby/JavaScriptをビルドする
まとめ
• アジャイル開発では必須のプロセス「CI」
– 特にJenkinsは注目を集めている
• 自動化を追求
– テストの自動化は当たり前のように行われている– テストの自動化は当たり前のように行われている
• テスト自動化を自動化
– 手動でテスト実行せず、CIサーバにまかせる
– 実行、レポートも自動
• 品質強化、維持しよう

More Related Content

Web技術勉強会 20120114 - JenkinsでJava/PHP/Ruby/JavaScriptをビルドする