SlideShare a Scribd company logo
1 of 37
Download to read offline
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
Jenkinsでビルドするには
• レポートファイルが必要
• build.xmlを使うと以下のファイルが生成され
る(名前は独自に変更可能)
– pmd.xml– pmd.xml
– cpd.xml
– phpunit.xml
• これらをJenkinsに食わせる
– [ジョブ]->[設定]でレポートファイルを指定する
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
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
まとめ
• アジャイル開発では必須のプロセス「CI」
– 特にJenkinsは注目を集めている
• 自動化を追求
– テストの自動化は当たり前のように行われている– テストの自動化は当たり前のように行われている
• テスト自動化を自動化
– 手動でテスト実行せず、CIサーバにまかせる
– 実行、レポートも自動
• 品質強化、維持しよう

More Related Content

Viewers also liked (6)

2014.11.01 Dockerことはじめ
2014.11.01 Dockerことはじめ2014.11.01 Dockerことはじめ
2014.11.01 Dockerことはじめ
 
A HUGE CHANGE RAILS 5 IS APPROACHING FAST
A HUGE CHANGE RAILS 5 IS APPROACHING FASTA HUGE CHANGE RAILS 5 IS APPROACHING FAST
A HUGE CHANGE RAILS 5 IS APPROACHING FAST
 
[xDNCL] 掲示資料
[xDNCL] 掲示資料[xDNCL] 掲示資料
[xDNCL] 掲示資料
 
How to learn Rails
How to learn RailsHow to learn Rails
How to learn Rails
 
PHPによるユニットテスト入門
PHPによるユニットテスト入門PHPによるユニットテスト入門
PHPによるユニットテスト入門
 
最近の単体テスト
最近の単体テスト最近の単体テスト
最近の単体テスト
 

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

Jasst12九州 倉貫資料:アジャイル・Ruby・クラウド(ARC)を活用したビジネスにおけるテストの実践 #jasst12Q
Jasst12九州 倉貫資料:アジャイル・Ruby・クラウド(ARC)を活用したビジネスにおけるテストの実践 #jasst12QJasst12九州 倉貫資料:アジャイル・Ruby・クラウド(ARC)を活用したビジネスにおけるテストの実践 #jasst12Q
Jasst12九州 倉貫資料:アジャイル・Ruby・クラウド(ARC)を活用したビジネスにおけるテストの実践 #jasst12Q
Yoshihito Kuranuki
 
Agile at salesforce
Agile at salesforceAgile at salesforce
Agile at salesforce
Ryoji Osawa
 
継続的デリバリー読書会 第 7 章 コミットステージ
継続的デリバリー読書会 第 7 章 コミットステージ継続的デリバリー読書会 第 7 章 コミットステージ
継続的デリバリー読書会 第 7 章 コミットステージ
Yasutomo Arai
 
継続的デリバリー読書会 第 5 章 デプロイメントパイプラインの解剖学
継続的デリバリー読書会 第 5 章 デプロイメントパイプラインの解剖学継続的デリバリー読書会 第 5 章 デプロイメントパイプラインの解剖学
継続的デリバリー読書会 第 5 章 デプロイメントパイプラインの解剖学
Takuma SHIRAISHI
 
Sharoid Service Menu
Sharoid Service MenuSharoid Service Menu
Sharoid Service Menu
sharoid
 
ニコニコ動画iOSアプリの UX・マネタイズ・技術の話
ニコニコ動画iOSアプリの UX・マネタイズ・技術の話ニコニコ動画iOSアプリの UX・マネタイズ・技術の話
ニコニコ動画iOSアプリの UX・マネタイズ・技術の話
Kentaro Matsumae
 

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

Netadvantage 2012 volume2 最新情報 Reporting 編
Netadvantage 2012 volume2 最新情報 Reporting 編Netadvantage 2012 volume2 最新情報 Reporting 編
Netadvantage 2012 volume2 最新情報 Reporting 編
 
Ignite UI 2012 最新情報 jQuery Mobile 編
Ignite UI 2012 最新情報 jQuery Mobile 編Ignite UI 2012 最新情報 jQuery Mobile 編
Ignite UI 2012 最新情報 jQuery Mobile 編
 
ワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeployワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeploy
 
Ignite ui 2012 最新情報 jQuery UI 編
Ignite ui 2012 最新情報 jQuery UI 編Ignite ui 2012 最新情報 jQuery UI 編
Ignite ui 2012 最新情報 jQuery UI 編
 
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】 Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】
 
Jasst12九州 倉貫資料:アジャイル・Ruby・クラウド(ARC)を活用したビジネスにおけるテストの実践 #jasst12Q
Jasst12九州 倉貫資料:アジャイル・Ruby・クラウド(ARC)を活用したビジネスにおけるテストの実践 #jasst12QJasst12九州 倉貫資料:アジャイル・Ruby・クラウド(ARC)を活用したビジネスにおけるテストの実践 #jasst12Q
Jasst12九州 倉貫資料:アジャイル・Ruby・クラウド(ARC)を活用したビジネスにおけるテストの実践 #jasst12Q
 
Agile at salesforce
Agile at salesforceAgile at salesforce
Agile at salesforce
 
【schoo WEB-campus】どうすれば小さなチームでも大きな成果を出せるのか
【schoo WEB-campus】どうすれば小さなチームでも大きな成果を出せるのか【schoo WEB-campus】どうすれば小さなチームでも大きな成果を出せるのか
【schoo WEB-campus】どうすれば小さなチームでも大きな成果を出せるのか
 
ぼくのかんがえた iOSテスト戦略
ぼくのかんがえた iOSテスト戦略ぼくのかんがえた iOSテスト戦略
ぼくのかんがえた iOSテスト戦略
 
継続的デリバリー読書会 第 7 章 コミットステージ
継続的デリバリー読書会 第 7 章 コミットステージ継続的デリバリー読書会 第 7 章 コミットステージ
継続的デリバリー読書会 第 7 章 コミットステージ
 
実演 AppExchange アプリケーション ライフサイクル
実演 AppExchange アプリケーション ライフサイクル実演 AppExchange アプリケーション ライフサイクル
実演 AppExchange アプリケーション ライフサイクル
 
Eric Ries at Startup Lessons Learned sllconf 2011 - Japanese Translation
Eric Ries at Startup Lessons Learned sllconf 2011 - Japanese TranslationEric Ries at Startup Lessons Learned sllconf 2011 - Japanese Translation
Eric Ries at Startup Lessons Learned sllconf 2011 - Japanese Translation
 
iQONの開発手法 at iQONエンジニアセミナー
iQONの開発手法 at iQONエンジニアセミナーiQONの開発手法 at iQONエンジニアセミナー
iQONの開発手法 at iQONエンジニアセミナー
 
継続的デリバリー読書会 第 5 章 デプロイメントパイプラインの解剖学
継続的デリバリー読書会 第 5 章 デプロイメントパイプラインの解剖学継続的デリバリー読書会 第 5 章 デプロイメントパイプラインの解剖学
継続的デリバリー読書会 第 5 章 デプロイメントパイプラインの解剖学
 
Sharoid Service Menu
Sharoid Service MenuSharoid Service Menu
Sharoid Service Menu
 
ニコニコ動画iOSアプリの UX・マネタイズ・技術の話
ニコニコ動画iOSアプリの UX・マネタイズ・技術の話ニコニコ動画iOSアプリの UX・マネタイズ・技術の話
ニコニコ動画iOSアプリの UX・マネタイズ・技術の話
 
[TL09] 突撃! 隣の Visual Studio Team Services / Team Foundation Server ~利用者からのベスト...
[TL09] 突撃! 隣の Visual Studio Team Services / Team Foundation Server ~利用者からのベスト...[TL09] 突撃! 隣の Visual Studio Team Services / Team Foundation Server ~利用者からのベスト...
[TL09] 突撃! 隣の Visual Studio Team Services / Team Foundation Server ~利用者からのベスト...
 
継続的デリバリー読書会資料 #1
継続的デリバリー読書会資料 #1継続的デリバリー読書会資料 #1
継続的デリバリー読書会資料 #1
 
Cibc lecture imagire
Cibc lecture imagireCibc lecture imagire
Cibc lecture imagire
 
地図を捨ててコンパスを頼りに進め
地図を捨ててコンパスを頼りに進め地図を捨ててコンパスを頼りに進め
地図を捨ててコンパスを頼りに進め
 

More from 龍一 田中

Web技術勉強会 20111112
Web技術勉強会 20111112Web技術勉強会 20111112
Web技術勉強会 20111112
龍一 田中
 
Web技術勉強会 20110723
Web技術勉強会 20110723Web技術勉強会 20110723
Web技術勉強会 20110723
龍一 田中
 
Web技術勉強会 20100925
Web技術勉強会 20100925Web技術勉強会 20100925
Web技術勉強会 20100925
龍一 田中
 

More from 龍一 田中 (20)

WebSocketでリアルタイム処理をする
WebSocketでリアルタイム処理をするWebSocketでリアルタイム処理をする
WebSocketでリアルタイム処理をする
 
Web技術勉強会 20130525 - Google Cloud Messaging入門
Web技術勉強会 20130525 - Google Cloud Messaging入門Web技術勉強会 20130525 - Google Cloud Messaging入門
Web技術勉強会 20130525 - Google Cloud Messaging入門
 
Web技術勉強会 20120728
Web技術勉強会 20120728Web技術勉強会 20120728
Web技術勉強会 20120728
 
Web技術勉強会 20120609
Web技術勉強会 20120609Web技術勉強会 20120609
Web技術勉強会 20120609
 
Web技術勉強会 20111112
Web技術勉強会 20111112Web技術勉強会 20111112
Web技術勉強会 20111112
 
Web技術勉強会 20110723
Web技術勉強会 20110723Web技術勉強会 20110723
Web技術勉強会 20110723
 
Web技術勉強会 20110611
Web技術勉強会 20110611Web技術勉強会 20110611
Web技術勉強会 20110611
 
Web技術勉強会 20110528
Web技術勉強会 20110528Web技術勉強会 20110528
Web技術勉強会 20110528
 
Web技術勉強会 20110514
Web技術勉強会 20110514Web技術勉強会 20110514
Web技術勉強会 20110514
 
Web技術勉強会 20100925
Web技術勉強会 20100925Web技術勉強会 20100925
Web技術勉強会 20100925
 
Web技術勉強会 20100424
Web技術勉強会 20100424Web技術勉強会 20100424
Web技術勉強会 20100424
 
Web技術勉強会 第38回
Web技術勉強会 第38回Web技術勉強会 第38回
Web技術勉強会 第38回
 
Web技術勉強会 第37回
Web技術勉強会 第37回Web技術勉強会 第37回
Web技術勉強会 第37回
 
Web技術勉強会 第34回
Web技術勉強会 第34回Web技術勉強会 第34回
Web技術勉強会 第34回
 
Web技術勉強会 第33回
Web技術勉強会 第33回Web技術勉強会 第33回
Web技術勉強会 第33回
 
Web技術勉強会 第31回
Web技術勉強会 第31回Web技術勉強会 第31回
Web技術勉強会 第31回
 
Web技術勉強会 第30回
Web技術勉強会 第30回Web技術勉強会 第30回
Web技術勉強会 第30回
 
Web技術勉強会 第29回
Web技術勉強会 第29回Web技術勉強会 第29回
Web技術勉強会 第29回
 
Web技術勉強会 第28回
Web技術勉強会 第28回Web技術勉強会 第28回
Web技術勉強会 第28回
 
Web技術勉強会 第26回
Web技術勉強会 第26回Web技術勉強会 第26回
Web技術勉強会 第26回
 

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