hudson skype plugin

つくって見ようとおもった契機


いままで自前のバッチファイルでmvnして結果をチームのskypeに流していた(http://d.hatena.ne.jp/udagawa/20071102#p1)。
hudsonが便利なのと自分のマシンにしかCI環境がないのはいまいちなのでhudsonに移行することにした。
skype通知プラグインがないかなと
http://hudson.gotdns.com/wiki/display/HUDSON/Plugins
みたけど skype という文字がなかったので作ってみることにした。

実際に作ってみた


まずhudsonのプラグインを作り方を
http://d.hatena.ne.jp/fits/20080502/1209726765
で学ぶ。hello worldレベルのものはすぐにできた。


次にどうやって作るか考えた。
すでにskype通知の部分はGroovyでおこなっていたのと
pluginを固めてdeployするのは面倒だと思ったので
hudsonからGroovyのスクリプトを呼ぶ出す方式にすることに決めた。
hudsonは内部でgroovyを使っているのでたぶん大丈夫だろうと。


hudson自体にきちんとライブラリがあったので呼び出す部分はすぐにできた。
hudsonのWebの画面の作り方はいまいちよくわからないのでかなり適当に他のプラグインのソースをコピペーして作る。


できた画面はこんな感じ

ファイルはとりあえずここにおいておきます。
http://uda.up.seesaa.net/dev/skype.hpi
%HUDSON_HOME%\plugins におけば動きます。確認したhudsonのバージョンは2009/02/15最新の1.283。
特にhudsonのバージョンによってうごかないということはないと思います。

うまくうごけば
%HUDSON_HOME%\plugins\skype\WEB-INF\classes\hudson\plugins\skype
にgroovyのスクリプトが入っているのでhudson起動中でもスクリプトを変更してかえることができます。
Java側を触るのは仕組みを作ったあとはgroovyのスクリプトに渡したい設定項目をWebに追加する時だけでした。

最初のアクセス時に「SkypeAPIをつかってSkypeにアクセスするけどいいのか」というメッセージがでるのでOKにする必要がある。

Skype Build Status


ビルドの状況をムードメッセージに表示するもの。

Skype Build Error


ビルドに失敗した時にチャットにメッセージ送信するもの。
Chat Nameはskypeのチャットの名前
Error Stringはエラーの文字列を正規表現で指定。たいていはdefaultで大丈夫だとおもうけど
MSBuildC#のビルドエラーが日本語ででるのでかえないとだめ。

Skype Test Error


JUnitReport形式(xxx.xml)を解析して失敗しているときにチャットにメッセージ送信するもの。


ためしたパターンは


NUnitPHPUnitは実運用でつかっていないのでうまくいかないことがあるかも。
JUnitReport形式に変換してくれるやつはたぶんどのUnitTestでも問題ないだろう。
NUnitはなぜか独自形式なのでNUnit Pluginのxslを拝借してJUnit Reportの形式に変換したものを使うようにしてある。
(NUnit Pluginの変換結果を使いたかったがNUnitPluginが動いた後にこいつを動かすようにする設定がよくわからなかったので)


テストに失敗するとこんな感じのメッセージが飛んでくる。

[build-ant]Test Error
hoge.String2Test.test_fail
junit.framework.ComparisonFailure: expected:<test2> but was:<test>
 at hoge.String2Test.test_fail(String2Test.java:11)
 
[build-mvn]Test Error
hoge.String2Test.test_fail
junit.framework.ComparisonFailure: null expected:<test[2]> but was:<test[]>
 at junit.framework.Assert.assertEquals(Assert.java:81)
 at junit.framework.Assert.assertEquals(Assert.java:87)
 at hoge.String2Test.test_fail(String2Test.java:15)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Meth...

[build-flex]Test Error
StringTest.test_fail
expected:<test> but was:<test2>

[build-phing]Test Error
.test_fail
test_fail(String2Test)
Failed asserting that two strings are equal.
expected string <test>
difference      <    ?>
got string      <test2>

C:\dev\hudson-1.283\.hudson\jobs\build-phing\workspace\build-phing\hoge\String2Test.php:18
C:\dev\php-5.2.8\PEAR\phing\tasks\ext\phpunit\PHPUnitTestRunner.php:9...

[build-nunit]Test Error
unittest.hoge.String2Test.TestFail

MESSAGE:
  Expected string length 5 but was 4. Strings differ at index 4.
  Expected: "Test2"
  But was:  "Test"
  ---------------^

+++++++++++++++++++
STACK TRACE:
場所 unittest.hoge.String2Test.TestFail() 場所 c:\dev\hudson-1.283\.hudson\jobs\build-nunit\workspace\unittest\hoge\String2Test.cs:行 25

問題点

Linuxで動かない(たぶんMacでも)


skype通知のライブラリ(Skype4java:http://skype.sourceforge.jp/)Windows, Linux, Mac でうごくことになっているがLinuxでは動かず。Macはマシンがないので試せず。
hudsonの問題ではなくてSkype4Javaの使い方の問題だと思われるが調べるのが面倒なので放置。

started
Updating http://localhost/svn/trunk/program/java/build-mvn
At revision 6087
no change for http://localhost/svn/trunk/program/java/build-mvn since the previous build
Parsing POMs
FATAL: com.skype.connector.linux.LinuxConnector.init(Ljava/lang/String;)V
java.lang.UnsatisfiedLinkError: com.skype.connector.linux.LinuxConnector.init(Ljava/lang/String;)V
  at com.skype.connector.linux.LinuxConnector.init(Native Method)
  at com.skype.connector.linux.LinuxConnector.init(LinuxConnector.java:68)
  at com.skype.connector.linux.LinuxConnector.initialize(LinuxConnector.java:114)


WEB-INF/lib には libJSA.jnilib, libJSA.so, skype_linux.jar swt-win32-3232.dll x86-3.3.0-v3346.jar をいれてみたがだめだった。

Windowsでサービス上で動かない


hudsonをservice wrapperで動かすとskype4javaがうまく動かない(Vistaで試した)。
hudsonがWindowsのserviceに対応するようになったのでそれをつかってみたがやっぱり動かない。


なのでWindows上で常にコマンドプロンプトが動いていることになります。。。

今後

仕事が忙しかったので公開が遅くなってしまった。。。
問題点を直してからにしたかったってのもあるがそれだといつまでも公開できないので。。。

今後の予定

  • できれば本家に取り込んでもらう。java.netのidは udagawa です。
  • できれば問題点を解消したい
  • MSTest, MbUnit, TestNG, flex-mojos, as3unitなど他のUnitTestとレポートの形式の検証。
  • スクリプトの中のクラスをファイルにきちんとわけたい。hudsonからの呼び出し時にクラスパスを設定できればいいだけなはずだけど方法がいまいちわからなかった。
  • 使う人が多いようであればいんちきな英語をきちんと直す。
  • リソースの日本語化