web技術勉強会 20120114 - jenkinsでjava/php/ruby/javascriptをビルドする

37
JenkinsJava/PHP/Ruby/JavaScript Web技術勉強会 2012/01/14 RyuichiTANAKA(@mapserver2007)

Upload: ryuichi-tanaka

Post on 05-Dec-2014

4.837 views

Category:

Documents


5 download

DESCRIPTION

JenkinsでJava/PHP/Ruby/JavaScriptプロジェクトをビルド。Javaは省略してます。

TRANSCRIPT

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

JenkinsでJava/PHP/Ruby/JavaScript

をビルドするをビルドする

Web技術勉強会 2012/01/14

Ryuichi TANAKA(@mapserver2007)

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

CI(継続的インテグレーション)

• 品質を継続的に確保するための手法

• XP(エクストリームプログラミング)の一つ

• ビルド、テスト、インスペクションを継続的に自動的に実施動的に実施

• CIをサポートする言語、ツールが増えつつある

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

Point of SalesとPoint of Use

http://www.sonicgarden.jp/

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

Point of Sales

• Point of Sales

– システム、アプリを売った時点が最高品質

– ウォーターフォールモデルで主に発生

– それ以降は品質が低下し続ける– それ以降は品質が低下し続ける

• 品質低下を防ぐために保守対応、障害対応が待っている

• 瑕疵担保期間が過ぎると品質低下を許容したまま使い続けるケースがありすぎて…

– 古来からのSI手法

• 良くないことはわかりつつも現実問題、Point of Salesにならざるを得ないケースがほとんど

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

Point of Use

• Point of Sales– 現在が常に最高品質– アジャイル開発モデル

– ツールなどを駆使して可能な限り自動化することが常識な世界常識な世界• テスト、ビルド、デプロイ、CIなど。人間による試験以外は自動化

– Webサービス運用で適用されること• システムを育てていくという観点• システムを他社に売るわけではないので可能だったり• 現実問題、SIerに適用するのはなかなかハードルが高い

– 永和システムマネジメントはSierながら実践

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

CIをやる意味

• 効率的な開発プロセスを学ぶ

–手元の環境だけではなく、共通の環境(サーバ)場でテスト、ビルド

–レポートが可視化される–レポートが可視化される

–なにかあったら(デグレードなど)すぐ分かる

• 品質向上の意識が高まる

–否応なしにグラフ化される

–結果を青くしたい欲求

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

Jenkinsとは

• 最も人気のあるCI(継続的インテグレーション)

ツール

• 豊富なプラグイン

• 開発者は日本人• 開発者は日本人

• Java製

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

Jenkinsでやるべきこと

• 必須

–ユニットテスト

• やれたらやりたい

–糞コードチェック–糞コードチェック

• PMD, CheckStyle, CPD

– カバレッジ

• やってもやんなくてもいい

– メール通知、Growl通知

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

Javaプロジェクトをビルド

• 省略

–そこいらに情報があるので調べてくれ。腐るほどある。

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

PMDとかCheckStyleは面倒なんでやってません。ガチで作るときはちゃんとルールの定義からやりましょう。

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

PHPプロジェクトをビルド

• PHPもJava並にビルド環境が揃ってる

• しかも情報がそれなりに豊富

– Javaには及ばないが

• PMD、CPDなども実用レベルなのでPHPと• PMD、CPDなども実用レベルなのでPHPとJenkinsはかなり相性がいいのではないか

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

PHPMD

• PHP版PMD

– バグがありそうなところやコード的におかしい部分をソースレベルで指摘してくれる。

• 黄色– 弱い警告。結構出る。– 弱い警告。結構出る。

– 全部直すのはけっこうきつい。

– 個人的には目をつぶる

• 赤– 強い警告。あまり出ない。

– これは直すべき。

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

インストール

$> sudo pear install phpunit/phpcpd$> sudo pear install phpunit/phpcpd

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

PHPCPD

• コード重複をチェックする

–例えば同じようなif文が連発する、など

• 閾値で調整できる

• 普通に書いていればまず出ない• 普通に書いていればまず出ない

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

インストール

$> sudo pear install phpmd/PHP_PMD$> sudo pear install phpmd/PHP_PMD

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

PHPUnit

• ご存知ユニットテストフレームワーク

–他のFWでもいけるかもしれないが、PHPUnitが一番無難で楽

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

インストール

$> sudo pear install phpunit/PHPUnit$> sudo pear install phpunit/PHPUnit

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

Phing

• PHP版Ant

– Antと使い方もほとんど同じ

• Phing+build.xmlでビルド

• サンプル• サンプル

– https://gist.github.com/1589175

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

Jenkinsでビルドするには

• レポートファイルが必要

• build.xmlを使うと以下のファイルが生成される(名前は独自に変更可能)

– pmd.xml– pmd.xml

– cpd.xml

– phpunit.xml

• これらをJenkinsに食わせる

– [ジョブ]->[設定]でレポートファイルを指定する

Page 21: Web技術勉強会 20120114 - JenkinsでJava/PHP/Ruby/JavaScriptをビルドする
Page 22: Web技術勉強会 20120114 - JenkinsでJava/PHP/Ruby/JavaScriptをビルドする
Page 23: Web技術勉強会 20120114 - JenkinsでJava/PHP/Ruby/JavaScriptをビルドする
Page 24: Web技術勉強会 20120114 - JenkinsでJava/PHP/Ruby/JavaScriptをビルドする

Rubyプロジェクトをビルド

• 情報がほとんどない

• 実戦投入するのはきついかも

–特にRails

• 今のところRspec/TestUnitで自動テストするこ• 今のところRspec/TestUnitで自動テストすることしかできていない

–知らないだけの可能性あり

• JUnit形式でレポート吐ければ終わり

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

RubyプロジェクトをJenkisビルド

• 用意するもの

– ci-reporter

• gem install ci-reporter

– Rakefile– Rakefile

• Jenkinsから呼び出す

• テスト

– RSpec

– Test::Unitでもいける

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

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をビルドする
Page 28: Web技術勉強会 20120114 - JenkinsでJava/PHP/Ruby/JavaScriptをビルドする
Page 29: Web技術勉強会 20120114 - JenkinsでJava/PHP/Ruby/JavaScriptをビルドする

JavaScriptプロジェクトをビルド

• 情報はほとんどない

• しかも何パターンかある

– JsUnit、mocha、QUnit etc.

• しかし、結局はテストしてJUnit形式のxml吐か• しかし、結局はテストしてJUnit形式のxml吐か

せることさえできればいいことに気づいたらあっさりできた

• まさかJSの自動テスト、ビルドにJavaとPerlが必要とは。

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

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をビルドする

コマンドで実行

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をビルドする

Antで実行

ant runant run

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

Antで実行

ant runant run

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

Antスクリプト

• https://gist.github.com/1609681

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

まとめ

• アジャイル開発では必須のプロセス「CI」

–特にJenkinsは注目を集めている

• 自動化を追求

–テストの自動化は当たり前のように行われている–テストの自動化は当たり前のように行われている

• テスト自動化を自動化

–手動でテスト実行せず、CIサーバにまかせる

–実行、レポートも自動

• 品質強化、維持しよう