ぐるっとぐりっど

日曜プログラマがいろいろ試してみたことを、後の自分のためにまとめておく場所

じぇじぇじぇ! jenkinsが動かない!

一話としてみたことないのに、流行に乗ってみました。
にわかキター!

と、いうわけで何もしてないのにjenkinsが動かなくなってしまいました><

実際は何もしてないわけではなく、yumでjenkinsをバージョンアップしたら、jenkinsの起動時に、以下のエラーメッセージが出て起動できなくなってしまったのです。

org.jvnet.hudson.reactor.ReactorException: hudson.util.IOException2: Unable to read /path/to/jenkins/config.xml
	at org.jvnet.hudson.reactor.Reactor.execute(Reactor.java:246)
	at jenkins.InitReactorRunner.run(InitReactorRunner.java:43)
	at jenkins.model.Jenkins.executeReactor(Jenkins.java:910)
	at jenkins.model.Jenkins.<init>(Jenkins.java:806)
	at hudson.model.Hudson.<init>(Hudson.java:81)
	at hudson.model.Hudson.<init>(Hudson.java:77)
	at hudson.WebAppMain$3.run(WebAppMain.java:221)
Caused by: hudson.util.IOException2: Unable to read /path/to/jenkins/config.xml
	at hudson.XmlFile.unmarshal(XmlFile.java:170)
	at jenkins.model.Jenkins$17.run(Jenkins.java:2530)
	at org.jvnet.hudson.reactor.TaskGraphBuilder$TaskImpl.run(TaskGraphBuilder.java:146)
	at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:259)
	at jenkins.model.Jenkins$7.runTask(Jenkins.java:899)
	at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:187)
	at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:94)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:679)
Caused by: com.thoughtworks.xstream.converters.ConversionException: Could not set field class hudson.security.csrf.DefaultCrumbIssuer.PROXY_HEADER : null : Could not set field class hudson.security.csrf.DefaultCrumbIssuer.PROXY_HEADER : null
---- Debugging information ----
message             : Could not set field class hudson.security.csrf.DefaultCrumbIssuer.PROXY_HEADER : null
cause-exception     : com.thoughtworks.xstream.converters.reflection.ObjectAccessException
cause-message       : Could not set field class hudson.security.csrf.DefaultCrumbIssuer.PROXY_HEADER : null
class               : hudson.security.csrf.DefaultCrumbIssuer
required-type       : hudson.security.csrf.DefaultCrumbIssuer
converter-type      : hudson.util.RobustReflectionConverter
path                : /hudson/crumbIssuer/PROXY_HEADER
line number         : 40
class[1]            : hudson.model.Hudson
version             : not available
-------------------------------
	at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:79)
	at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
	at hudson.util.RobustReflectionConverter.unmarshalField(RobustReflectionConverter.java:333)
	at hudson.util.RobustReflectionConverter.doUnmarshal(RobustReflectionConverter.java:275)
	at hudson.util.RobustReflectionConverter.unmarshal(RobustReflectionConverter.java:222)
	at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
	at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)
	at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:134)
	at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32)
	at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1061)
	at hudson.util.XStream2.unmarshal(XStream2.java:109)
	at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1045)
	at hudson.XmlFile.unmarshal(XmlFile.java:166)
	... 9 more
Caused by: com.thoughtworks.xstream.converters.reflection.ObjectAccessException: Could not set field class hudson.security.csrf.DefaultCrumbIssuer.PROXY_HEADER : null
	at com.thoughtworks.xstream.converters.reflection.Sun14ReflectionProvider.write(Sun14ReflectionProvider.java:141)
	at com.thoughtworks.xstream.converters.reflection.Sun14ReflectionProvider.writeField(Sun14ReflectionProvider.java:104)
	at hudson.util.RobustReflectionConverter.doUnmarshal(RobustReflectionConverter.java:290)
	at hudson.util.RobustReflectionConverter.unmarshal(RobustReflectionConverter.java:222)
	at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
	... 24 more
Caused by: java.lang.IllegalArgumentException
	at sun.misc.Unsafe.objectFieldOffset(Native Method)
	at com.thoughtworks.xstream.converters.reflection.Sun14ReflectionProvider.getFieldOffset(Sun14ReflectionProvider.java:150)
	at com.thoughtworks.xstream.converters.reflection.Sun14ReflectionProvider.write(Sun14ReflectionProvider.java:112)
	... 28 more

解決策

該当する設定項目をconfig.xmlから削除すると、エラーでなくなるけど、本当にこの解決方法でいいのだろうか。名前からしてCSRF対策のための設定なんだろうけど、設定の詳細がわからないのでちょっと不安。

(前略)
  <label></label>
<!-- コメント化
  <crumbIssuer class="hudson.security.csrf.DefaultCrumbIssuer">
    <excludeClientIPFromCrumb>false</excludeClientIPFromCrumb>
    <PROXY__HEADER>X-Forwarded-For</PROXY__HEADER>
  </crumbIssuer>
-->
  <nodeProperties/>
(後略)

そもそもほかにこの事象に遭遇している人が少ない感じなので、もう少し様子を見てみよう

追記(2013/10/14)

1.534で解決したらしいですね

https://issues.jenkins-ci.org/browse/JENKINS-19613

1.533で使いたかったら、ワークアラウンドとして、私がやった解決方法である設定のコメントアウトをすればいいよってコメントもあり。ほんとにいいのかな、それで