web技術勉強会 20120114 - jenkinsでjava/php/ruby/javascriptをビルドする
DESCRIPTION
JenkinsでJava/PHP/Ruby/JavaScriptプロジェクトをビルド。Javaは省略してます。TRANSCRIPT
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 --harness prove --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サーバにまかせる
–実行、レポートも自動
• 品質強化、維持しよう