Jenkins+Play!で気軽にCI
Upcoming SlideShare
Loading in...5
×
 

Jenkins+Play!で気軽にCI

on

  • 12,185 views

Jenkins+Play!で気軽にCI

Jenkins+Play!で気軽にCI
第二回Jenkins勉強会
5分で終わらなかったLT

Statistics

Views

Total Views
12,185
Views on SlideShare
8,084
Embed Views
4,101

Actions

Likes
13
Downloads
45
Comments
0

20 Embeds 4,101

http://d.hatena.ne.jp 2392
http://ikeike443.hatenablog.com 745
http://shanon-tech.blogspot.com 396
http://shanon-tech.blogspot.jp 292
http://samuraism.jp 213
http://webcache.googleusercontent.com 26
http://paper.li 8
https://twitter.com 7
http://translate.googleusercontent.com 5
http://a0.twimg.com 3
http://shanon-tech.blogspot.fr 2
http://192.168.33.10 2
https://twimg0-a.akamaihd.net 2
http://twitter.com 2
http://static.slidesharecdn.com 1
http://jptrans.naver.net 1
http://www.linkedin.com 1
http://131.253.14.98 1
http://dschool.co 1
http://shanon-tech.blogspot.kr 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Jenkins+Play!で気軽にCI Jenkins+Play!で気軽にCI Presentation Transcript

  • Jenkins + Play! で気軽にCI!
  • 自己紹介● 池田尚史(いけだたかふみ)● Twitter @ikeike443● はてな id:ikeike443● 所属:シャノン● Play!の翻訳協力 (http://playdocja.appspot.com)
  • マーケティングSaaSの会社です● セミナー、イベントに強いです● デブサミ● Interop● TechCrunchJapan(Teclosion)● 他いっぱい
  • 本題Jenkins + Play! で気軽にCIするためのプラグインを書きましたその紹介をかねてPlay!のCI事情を話します
  • その前に。。。● Play! Framework って知ってますか?● 試したことある方いらっしゃいますか?● ツール、プロダクトを実装してリリース までした方いらっしゃいますか?
  • Play! って?● JavaをLLっぽく使うWebフレームワーク● Railsライクなフルスタック● 100% no XML● ServletもJSPも捨てちゃった*● RESTfulなAPIを書くのがとっても楽
  • っていうか、Play!と言え ば。。。
  • ですよねー
  • でも今日はScalaの話はしません
  • Jenkins+Play!のCI事情の話をします
  • あじぇんだ● CI目線で見たPlay!のいいところ悪いとこ ろ● JenkinsをPlay!に統合するときどこが問 題になるか● 埋めるためにどんなプラグインを書いた か(書いているか)
  • Play! のいいところ by CI目線● 単体テスト、結合テスト、受け入れテス トを設定無しでさくっと書ける● Coberturaプラグインでカバレッジも計 測できる● テストにおけるDBの扱いがCool● Fixtureもあるよ
  • 用意されているテスト● Unit Tests –Junitで各クラスを● Functional Tests – Junit + HttpClient でコントローラを叩いて● Selenium Test – ビルトインされたSelenium で受け入れテスト
  • Unit Testimport play.test.*;import org.junit.*;public class MyTest extends UnitTest { @Test public void aTest() { assertEquals(2, 1 + 1); // A really important thing to test } @Test public void testUsers() { assertEquals(3, Users.count()); }}
  • Functional Testimport play.test.*;import play.mvc.*;import play.mvc.Http.*;import org.junit.*;public class ApplicationTest extends FunctionalTest { @Test public void testTheHomePage() { Response response = GET("/"); assertStatus(200, response); }}
  • Selenium Test#{selenium Test security} // Try to log in the administration area clearSession() open(/admin) assertTextPresent(Login) type(login, admin) type(password, secret) clickAndWait(signin) // Verify that the user in correctly logged in assertText(success, Welcom admin!)#{/selenium}※直接HTMLテーブルを書く方法でもできます
  • $ play test
  • Coberturaも使えるよ● Coberturaプラグインが用意されています● 下記のように設定ファイルを書くだけで良い # The cobertura test coverage module %test.play.tmp=none %test.module.cobertura=$ {play.path}/modules/cobertura %test.cobertura.silent=false
  • でも悩むのはDBの扱い。。
  • インメモリDB使えるよ● 設定を下記のようにすると、テスト時のみ HSQLDBにインメモリモードで接続してくれ ます %test.db=mem● これはとても便利
  • DDLは?● 設定を下記のようにすると、テスト時のみ自 動でCreateしてくれます %test.jpa.ddl=create-drop● スキーマ情報はモデルクラスにアノテーショ ンを書いて表現します(JPA使ってます)
  • Fixtureも用意されてるよ! @Before public void setUp() { Fixtures.deleteAll(); Fixtures.load("data.yml"); }● Yamlでデータを用意して、テストクラスに上 記のようにかけばいいです
  • 要は、● メモリ上に一時的にDBをCreate● メモリ上のDBにテストデータを登録● テストが終わったらDBをデータもろとも捨て る (Dropいらず)
  • とってもテストフレンドリー
  • Play! の悪いところ by CI目線● 依存関係管理の機構がない● TestsRunnerはブラウザベースアプリと して実装されていて、CIとの親和性が低 い
  • 依存関係管理の機構がない● ディレクトリ構成がMavenを拒否している app test conf lib public● 作者のGuillaumeがMaven嫌い。ivy使えよ的な● 尚、Play!の次のリリースからはDependencyコマン ドが追加されます(内部実装はivy使ってる)
  • TestsRunnerがブラウザアプリ
  • TestsRunnerがブラウザアプリ● ブラウザ立ち上げないといけないし、手動テスト じゃね?? ● Jenkinsで自動実行するの辛くないスか?● そう思っていた時期が僕にもありました
  • ご心配なく● 仮想フレームバッファ(Xfvb)があるよ!
  • ご心配なく● 下記コマンドがあります $ play auto-test● 内部でHtmlUnitを使っています● 先程のTestsRunnerをバックグラウンドで走らせる ことが出来ます● これでJenkinsで自動ビルド&テストが可能です
  • HtmlUnitとは● HtmlUnit is a "GUI-Less browser for Java programs". It models HTML documents and provides an API that allows you to invoke pages, fll out forms, click links, etc... just like you do in your "normal" browser. (http://htmlunit.sourceforge.net/)● Jenkins内部のHudsonTestCaseの中にも組み込ま れてますよね
  • ちなみに半年くらいまえまでは● auto-testコマンドに、このHtmlUnitサポートがな かった● つまり、自動テストをするためには、 – CiサーバにXを入れるか – Xvfbを使って仮想のXを動かすか のどちらかの対応が必要でした。。
  • ここまでおさらい● JUnit● HtmlUnit+Selenium● Cobertura● HSQLDB(インメモリ)● Fixture を特別なセットアップなしに気軽に使え る● 依存関係管理は頑張りましょう。。。
  • さてそこでJenkins● ビルド&テストは気軽に出来るけど、CIサー バがない。● Jenkins使おう
  • Play!をJenkinsで使う場合の問題点● MavenでもAntでもない独自コマンドを使って る● テスト結果のフォーマットも独自 (っていうかHTML。。。)
  • とりあえず素朴にやってみよう● 設定
  • 結果● ビルド結果 失敗したことしか分からん。。 ※女性の写真は無関係です。。
  • 結果● ワークスペースこうなった
  • なんかHTMLいっぱいあってこわい。。
  • このままじゃ
  • Play!はCIに向かないFW ( *´艸`)ププッ
  • とか言われちゃう。。
  • なのでプラグイン書きました
  • こんなふうに設定して
  • 実行すると
  • こんなふうに結果を見られます
  • 結果の詳細はこんな感じUnit TestSelenium Test
  • テストがこけるとこうなります
  • テストがこけるとこうなります
  • このプラグインがあれば
  • Play!はCIに向かないFW ( *´艸`)ププッ
  • とか言われないで済む! 。。。はず
  • このプラグインを使えば● JUnit● HtmlUnit+Selenium● Cobertura● HSQLDB(インメモリ)● Fixture を特別なセットアップなしに気軽に使える +カッコいいデザインのテスト結果!
  • 依存関係管理は?…
  • プラグインの拡張で対応します!
  • Jenkinsのアップデートセンターに置いてあるので使ってみてくださ い!
  • コードはGithubにありますhttps://github.com/jenkinsci/play-plugin
  • Jenkins + Play! で気軽にCIしましょう!
  • ご静聴ありがとうございました
  • おまけ
  • PaaSとの相性● Play! はPaaSとの相性もいいです● まずなによりPlay! 自体がPaaSを持って います● RailsのHeroku的な位置づけ (機能全然足りてないですけど。。)
  • https://www.playapps.net/
  • PaaSとの相性● GoogleAppEngine プラグインあり● Stax Networks プラグインあり● CloudeBees プラグインもある!? ※Staxは最近CloudBeesに買収された