2014-01-07

執事が燃え尽きちゃったのでしょうか?白すぎます…。

久しぶりに、Blog側への投稿となります。

最近はQiitaやGistなどもちょこちょこ使ってみて、こちらの更新頻度が少ないのですが、コメントなどいただけましたら、できるだけお返事をさせていただきますので、2014年も、どうぞ宜しくお願いいたします。

さて、2014年最初のエントリは、お正月休み明けの執事 / Jenkinsさんのお話です。

年末に執事を酷使しすぎたせいでしょうか。年明け、担当のJenkinsにアクセスすると、画像やスタイルが適用されてないという状況に遭遇してしまいました!

あれれ〜と思って、その他2つのJenkinsを確認したのですが、そのうちもう1つは問題なく、もう1つは同じ現象になっていました。

Static fileがロードされないので、白い画面に…。
どうやら、cssやら画像ファイルが、軒並みNot Found (404) になっちゃっている模様です。

フロントのWebサーバのせいかなと思ったのですが、8080番で直にアクセスしてもcss, 画像が抜けて画面が白いままです…。


たとえば、/static/dae700fa/images/jenkins.png というパスでJenkinsおじさんのロゴがリクエストされるのですが、こちらですら404 Not Foundになってしまいます。

FireFoxでチェックすると、ことごとく /static/ なパスの静的ファイルが404になってしまっているようです。

問題ないJenkinsは、バージョンが古いものだったので、Changelogを見たのですが、それっぽいものは無し。
思い当たるのは、問題ないもののほうはwinstoneで、不具合が出ているものはjettyでの起動に切り替わったJenkinsでした。

バグレポートを見る / Jettyの関係かも?


で、バグレポートを調べたら、どうやらそれっぽいものがHITしました。

どうも、Jenkinsというよりは、jettyの問題(特性?)っぽいです。

昨年後半、Jenkinsの起動のための軽量コンテナが、winstoneからjettyに変更になりました。確かに、白いJenkinsになっているのは、jetty化以後のJenkinsです。問題の2つは、rpmでインストールして、起動スクリプトもそのまま利用しているものです。

起動させてからしばらくは、このような問題は発生していませんでした。

バグレポートの情報を頼りに、/tmp の下を眺めてみると、jenkins.jar の中身が /tmp 以下に展開されていました。winstoneの時は、/var/lib/jenkins/war 以下だったのですが、jettyの場合は、/tmp/jetty-0.0.0.0-8080-jenkins.war--any-/webapp 以下になっています。

あれれーと思って、新規にインストールしたての環境と比べてみました。バージョンが違っちゃっているのですが、明らかにモノが少ない!

新規で入れたての場合の /tmp/jetty-0.0.0.0-8080-jenkins.war--any-/webapp

# ls -la
total 1840
drwxr-xr-x  9 jenkins jenkins    4096 2014-01-06 20:27 .
drwxr-xr-x  3 jenkins jenkins    4096 2014-01-06 20:27 ..
-rw-r--r--  1 jenkins jenkins    2824 2013-10-06 11:21 ColorFormatter.class
-rw-r--r--  1 jenkins jenkins    1845 2013-10-06 11:21 JNLPMain.class
-rw-r--r--  1 jenkins jenkins     788 2013-10-06 11:21 LogFileOutputStream$1.class
-rw-r--r--  1 jenkins jenkins     586 2013-10-06 11:21 LogFileOutputStream$2.class
-rw-r--r--  1 jenkins jenkins    2197 2013-10-06 11:21 LogFileOutputStream.class
drwxr-xr-x  3 jenkins jenkins    4096 2014-01-06 20:27 META-INF
-rw-r--r--  1 jenkins jenkins     512 2013-10-06 11:21 Main$FileAndDescription.class
-rw-r--r--  1 jenkins jenkins   19577 2013-10-06 11:21 Main.class
-rw-r--r--  1 jenkins jenkins    1049 2013-10-06 11:21 MainDialog$1$1.class
-rw-r--r--  1 jenkins jenkins    1123 2013-10-06 11:21 MainDialog$1.class
-rw-r--r--  1 jenkins jenkins    2424 2013-10-06 11:21 MainDialog.class
drwxr-xr-x  7 jenkins jenkins    4096 2014-01-06 20:27 WEB-INF
drwxr-xr-x  2 jenkins jenkins    4096 2014-01-06 20:27 css
-rw-r--r--  1 jenkins jenkins    1544 2013-12-15 05:35 dc-license.txt
drwxr-xr-x  2 jenkins jenkins    4096 2014-01-06 20:27 executable
-rw-r--r--  1 jenkins jenkins   17542 2013-12-15 05:35 favicon.ico
drwxr-xr-x 15 jenkins jenkins    4096 2014-01-06 20:27 help
drwxr-xr-x  6 jenkins jenkins    4096 2014-01-06 20:27 images
-rw-r--r--  1 jenkins jenkins      71 2013-12-15 05:35 robots.txt
drwxr-xr-x  3 jenkins jenkins    4096 2014-01-06 20:27 scripts
-rw-r--r--  1 jenkins jenkins 1759941 2013-12-15 05:44 winstone.jar


問題のあるJenkinsの /tmp/jetty-0.0.0.0-8080-jenkins.war--any-/webapp

# ls -la
合計 20
drwxr-xr-x 5 jenkins jenkins 4096 12月  8 16:07 2013 .
drwxr-xr-x 3 jenkins jenkins 4096 12月  8 16:07 2013 ..
drwxr-xr-x 3 jenkins jenkins 4096 12月  8 16:07 2013 WEB-INF
drwxr-xr-x 2 jenkins jenkins 4096 12月  8 16:07 2013 css
drwxr-xr-x 3 jenkins jenkins 4096 12月  8 16:07 2013 scripts 

問題が出たJenkinsは、10月から11月にセットアップしたもので、起動後1ヶ月くらい経過したものです。

バグレポートやjettyの情報で考えるに、/tmp に展開されたファイルのうち、更新のない静的ファイルはcronで消されてしまったようです…。(わたしの場合はCentOSで、tmpwatchのcronが/tmpのお掃除をしています)

ジョブ自体は粛々と実行されているんですが、ログインやらアカウント追加やら、GUIでの操作には大変困る状況になってしまいました(^^;;;;;

#テキストブラウザでは、一応リンクが見えますので操作可能です。


再起動すればいいような気がしますが、それだと問題が再現するので、なんとか /tmp 以下ではなく、/var/lib/jenkins/war  以下に展開して欲しいところです…。
jettyで調整できなければ、cron側の調整で一時対応でしょうか。

皆さんの扱っているJenkinsでも、一ヶ月以上起動しているもので、再現してたりしませんか?

追記:20140128

同様の症状が発生し、再起動したら直る、というご報告もいくつか頂きました。
1月中旬までは、再現が続いていたため、コメントに記載したような回避策をとっています。

また、tmpwatchによってCSS、スタイル、画像が消えてしまうだけでなく、webapp/ 直下の*.classも消えてしまうので、設定の変更 -> 保存の場合に、NullPointerExceptionなどのエラーメッセージが出てしまうことがありました。
編集画面を開こうとして、CSSのロードがうまくできずにWebのクリック、入力、更新が出来ない状況も発生しています。

1/25に、上記に対応したリリースが出ているようです。

5 件のコメント:

  1. うわ!まさに昨日この現象にあい、あまり調べずにJenkinsを再起動しました。
    私も解決策知りたいです。

    返信削除
  2. snicker_jpさま、コメントありがとうございます!
    自分だけじゃなかったのを知って、ホットしたような、困ったような…。

    うっかり再起動ができないサーバもあるので、1つは、/usr/lib/jenkins/jenkins.war をzipで回答して、/tmp/jetty-0.0.0.0-8080-jenkins.war--any-/webapp/ 以下にコピーしました。
    一応画像とCSSが復活してくれました…。

    再起動にしても、リストアにしても、一時的な対応なので、起動スクリプトとかで対応するか、Jenkins本体側で、うまくJENIKINS_HOMEに展開してくれるようになるのを待つか、でしょうか。

    返信削除
    返信
    1. コメント返信ありがとうございます!
      私も同じ人が居てほっとし。さらには詳細に調査されていて、ためになりました!

      私の環境ではJavaのOptionにtmpdirの指定をしました。
      その顛末を今日書いておきました。
      http://snickerjp.blogspot.com/2014/01/Jenkins-whiteout.html

      調査いただきありがとうございました!

      削除
    2. 引き続きコメントありがとうございます!
      tmpdirの変更になるんですね。こちらは、上記の他に、tmpwatchの期間を調整したり、jettyのディレクトリは除外するような設定でも回避できることはわかりました。

      でも、もともとはrpmでインストールしていて、/usr/lib/jenkins 以下に展開されていたので、なんとかrpmのスクリプトか、本体側で回避策が用意されるといいですね。

      削除
  3. やっぱり数日経つと再現したので、対応をまとめておきます。

    tmpdirを変更する場合はプロセス再起動が必要。
    再起動NGなところもあったので、そのケースでは、jenkins.war を展開して/tmp/jetty… 以下にリストアして消されたものを補充しました。
    また、tmpwatchのcronを修正しました。

    対象:/etc/cron.daily/tmpwatch
    内容:-x '/tmp/jetty*' (除外指定)を追加

    また、Jenkins本体のChangelogをチェックしに行ったところ、1.549で該当すバグに対する修正が入った模様。ただし、本体ではなく、rpm側の設定ファイル?のようなので、確認してみます。

    返信削除