2014年8月27日水曜日

MacをJenkinsのスレーブにしたときUnexpected termination of the channel

slave.jarはMacにコピーされるのですがその後、Unexpected termination of the channelという
エラーを吐いて最後はスレーブがオフラインになる症状に遭遇しました。

Macへのスレーブ起動方法はSSHを利用しました。
java.io.IOException: Unexpected termination of the channel
 at hudson.remoting.SynchronousCommandTransport$ReaderThread.run(SynchronousCommandTransport.java:50)
Caused by: java.io.EOFException
 at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2323)
 at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2792)
 at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:800)
 at java.io.ObjectInputStream.<init>(ObjectInputStream.java:298)
 at hudson.remoting.ObjectInputStreamEx.<init>(ObjectInputStreamEx.java:40)
 at hudson.remoting.AbstractSynchronousByteArrayCommandTransport.read(AbstractSynchronousByteArrayCommandTransport.java:34)
 at hudson.remoting.SynchronousCommandTransport$ReaderThread.run(SynchronousCommandTransport.java:48)
起動時のJVMオプションに-Djava.awt.headless=trueを設定すると対応できました。

JenkinsのWikiにも載っていました。
-Djava.awt.headless=true

X サーバが有効となっていない UNIX環境で jenkins を利用するときに、無用なトラブルに会わないために必要です。