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で大丈夫だとおもうけど
MSBuildでC#のビルドエラーが日本語ででるのでかえないとだめ。
Skype Test Error
JUnitReport形式(xxx.xml)を解析して失敗しているときにチャットにメッセージ送信するもの。
ためしたパターンは
- JUnit(antのjunitタスク, maven2のtestゴール)
- FlexUnit(antのjunitreportタスク)
- NUnit(MSBuildのNUnitタスク)
- PHPUnit(Phingのphpunit2タスク)。
NUnitとPHPUnitは実運用でつかっていないのでうまくいかないことがあるかも。
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 をいれてみたがだめだった。
今後
仕事が忙しかったので公開が遅くなってしまった。。。
問題点を直してからにしたかったってのもあるがそれだといつまでも公開できないので。。。
今後の予定