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