garbagetown

個人の日記です

Hudson

Hudson を試しているのですが、再起動すると二度と立ち上がらなくなるという事象にブツかって困っています。

環境

  • Hudson 1.301

Ubuntu 8.10 でも WindowsXP SP3 でも Tomcat 6.0.18 でも Hudson 付属の Winstone 0.9.10 でも同じようにコケるので、OS や ServletEngine には依存していないようです。

事象

新規プロジェクト作成後、Hudson を再起動すると NullPointerException が発生する。画面に表示されるエラーログは下記のとおり。

java.lang.NullPointerException
	at hudson.model.Job.getACL(Job.java:1228)
	at hudson.model.AbstractItem.hasPermission(AbstractItem.java:209)
	at hudson.model.Hudson.getItems(Hudson.java:1023)
	at hudson.model.Hudson.getItems(Hudson.java:196)
	at hudson.model.Hudson.getAllItems(Hudson.java:1068)
	at hudson.model.DependencyGraph.(DependencyGraph.java:89)
	at hudson.model.Hudson.rebuildDependencyGraph(Hudson.java:3007)
	at hudson.model.Hudson.load(Hudson.java:1992)
	at hudson.model.Hudson.(Hudson.java:540)
	at hudson.WebAppMain$2.run(WebAppMain.java:191)

まず Ubuntu + Tomcat で当該事象に遭遇。その後、Ubuntu + Winstone でも同じ事象を確認。
ACL とか Permission などの権限周りっぽい文言が表示されているので、WindowsXP + Winstone でなら動くだろうと思って試してみたのですが、やっぱり同じ事象が発生してしまいました。

再現手順

WinodwsXP + Winstone で下記を実行すると再現します。

  1. java -jar hudson.war を実行して winstone 上で hudson を起動
  2. localhost:8080 にアクセス
  3. 新規ジョブ作成画面で、適当な名称を入力後、フリースタイル・プロジェクトにチェックを入れて「OK」ボタンをクリック
  4. プロジェクト設定画面で、何も入力せずに「保存」ボタンをクリック
  5. Ctrl + C で winstone を停止
  6. java -jar hudson.war を再度実行
  7. localhost:8080 に再度アクセス

上記手順を実行した際にコマンドプロンプトに出力されたエラーログは下記の通りです。

D:\work>java -jar hudson.war
Running from: D:\work\hudson.war
[Winstone 2009/05/02 10:31:54] - Beginning extraction from war file
[Winstone 2009/05/02 10:32:07] - No webapp classes folder found - C:\Documents and Settings\xxxxx\.hudson\war\WEB-INF\classes
hudson home directory: C:\Documents and Settings\xxxxx\.hudson
[Winstone 2009/05/02 10:32:08] - Winstone Servlet Engine v0.9.10 running: controlPort=disabled
[Winstone 2009/05/02 10:32:08] - HTTP Listener started: port=8080
[Winstone 2009/05/02 10:32:08] - AJP13 Listener started: port=8009
2009/05/02 10:32:09 hudson.ClassicPluginStrategy createPluginWrapper
情報: Loading plugin: C:\Documents and Settings\xxxxx\.hudson\plugins\maven-plugin.hpi
2009/05/02 10:32:09 hudson.ClassicPluginStrategy explode
情報: Extracting C:\Documents and Settings\xxxxx\.hudson\plugins\maven-plugin.hpi
2009/05/02 10:32:16 hudson.ClassicPluginStrategy createPluginWrapper
情報: Loading plugin: C:\Documents and Settings\xxxxx\.hudson\plugins\ssh-slaves.hpi
2009/05/02 10:32:16 hudson.ClassicPluginStrategy explode
情報: Extracting C:\Documents and Settings\xxxxx\.hudson\plugins\ssh-slaves.hpi
2009/05/02 10:32:16 hudson.model.Hudson load
情報: Took 280 ms to load
2009/05/02 10:32:16 hudson.TcpSlaveAgentListener <init>
情報: JNLP slave agent listener started on TCP port 4822
2009/05/02 10:32:46 hudson.model.UpdateCenter doPostBack
情報: Obtained the latest update center data file
[Winstone 2009/05/02 10:33:01] - Control thread shutdown successfully
[Winstone 2009/05/02 10:33:01] - Winstone shutdown successfully

D:\work>java -jar hudson.war
Running from: D:\work\hudson.war
[Winstone 2009/05/02 10:34:42] - Beginning extraction from war file
[Winstone 2009/05/02 10:34:43] - No webapp classes folder found - C:\Documents and Settings\xxxxx\.hudson\war\WEB-INF\classes
hudson home directory: C:\Documents and Settings\xxxxx\.hudson
[Winstone 2009/05/02 10:34:44] - Winstone Servlet Engine v0.9.10 running: controlPort=disabled
[Winstone 2009/05/02 10:34:45] - HTTP Listener started: port=8080
[Winstone 2009/05/02 10:34:45] - AJP13 Listener started: port=8009
2009/05/02 10:34:45 hudson.ClassicPluginStrategy createPluginWrapper
情報: Loading plugin: C:\Documents and Settings\xxxxx\.hudson\plugins\maven-plugin.hpi
2009/05/02 10:34:45 hudson.ClassicPluginStrategy createPluginWrapper
情報: Loading plugin: C:\Documents and Settings\xxxxx\.hudson\plugins\ssh-slaves.hpi
2009/05/02 10:34:45 hudson.WebAppMain$2 run
致命的: Failed to initialize Hudson
java.lang.NullPointerException
        at hudson.model.Job.getACL(Job.java:1228)
        at hudson.model.AbstractItem.hasPermission(AbstractItem.java:209)
        at hudson.model.Hudson.getItems(Hudson.java:1023)
        at hudson.model.Hudson.getItems(Hudson.java:196)
        at hudson.model.Hudson.getAllItems(Hudson.java:1068)
        at hudson.model.DependencyGraph.<init>(DependencyGraph.java:89)
        at hudson.model.Hudson.rebuildDependencyGraph(Hudson.java:3007)
        at hudson.model.Hudson.load(Hudson.java:1992)
        at hudson.model.Hudson.<init>(Hudson.java:540)
        at hudson.WebAppMain$2.run(WebAppMain.java:191)
Exception in thread "hudson initialization thread" java.lang.NullPointerException
        at hudson.model.Job.getACL(Job.java:1228)
        at hudson.model.AbstractItem.hasPermission(AbstractItem.java:209)
        at hudson.model.Hudson.getItems(Hudson.java:1023)
        at hudson.model.Hudson.getItems(Hudson.java:196)
        at hudson.model.Hudson.getAllItems(Hudson.java:1068)
        at hudson.model.DependencyGraph.<init>(DependencyGraph.java:89)
        at hudson.model.Hudson.rebuildDependencyGraph(Hudson.java:3007)
        at hudson.model.Hudson.load(Hudson.java:1992)
        at hudson.model.Hudson.<init>(Hudson.java:540)
        at hudson.WebAppMain$2.run(WebAppMain.java:191)

try & error では埒が明かなくなってきたので、hudson のソースを読んでみます。