くりにっき

フルスタックキュアエンジニアです

JenkinsのFailed to serializeに半年くらい悩まされてようやく解決した

忙しい人の1行まとめ

入れてるプラグインがtransientつけ忘れ

概要

Jenkinsのグローバル設定やジョブの設定を保存する時に高確率で「Failed to serialize」エラーが出てその度にJenkinsが激おこになる現象が発生

f:id:sue445:20150111134017j:plain

エラーの内容

javax.servlet.ServletException: java.lang.RuntimeException: Failed to serialize hudson.matrix.MatrixProject#publishers for class hudson.matrix.MatrixProject
    at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:796)
    at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)
    at org.kohsuke.stapler.MetaClass$6.doDispatch(MetaClass.java:249)
    at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)
    at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)

スタックトレース全文 https://gist.github.com/sue445/9dedd61faab63a87c880

スタックトレースが超長い上にエラーが起きるクラスも毎回変わるのでわけわかめ

一度このエラーになるとappサーバを再起動しないと直らないのでストレスもマッハ

ググっても似たような現象が見つからないしてっきりJavaとappサーバの組み合わせが悪いのかと思ってたら入れてるプラグイン( jenkins-chatwork-plugin )が原因でした。

原因

設定ファイルに保存すべきでない値(ジョブ実行時のインスタンス)をインスタンス変数として持っていたのが原因。プラグインを大幅修正するのに抵抗があったのでtransient(つけた変数をシリアライズ対象外にする)つけて回避。

修正したPR Fix: Failed to serialize by sue445 · Pull Request #8 · nanapi/jenkins-chatwork-plugin · GitHub