忙しい人の1行まとめ
入れてるプラグインがtransientつけ忘れ
概要
Jenkinsのグローバル設定やジョブの設定を保存する時に高確率で「Failed to serialize」エラーが出てその度にJenkinsが激おこになる現象が発生
エラーの内容
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