経緯
とある事情で、jenkinsを別サーバにバックアップ(/var/lib/jenkins配下すべて)しておいたデータからリストアすることになった。
データを丸ごと持ってきてもうまく動作しなかった為、以下復旧までの対処方法を書きます。
環境
Centos7.1 x86_64
Jenkins Ver 1.656
はまったところ
手動でビルド実行するとうまくいく場合もあるが、概ねビルド実行をクリックしても何も反応しない。
裏では、/var/log/jenkins/jenkins.logで後で書くエラーがでていた。
定期実行でビルド実行しているが、何10分たっても実行されず、、
終いに下記エラーで止まる
pending - 利用可能な次のエグゼキュータ―を待っています
解決方法として、ビルド履歴を削除し、その後jenkinsを再起動する必要がある
移行後、ビルド実行時に/var/log/jenkins/jenkins.logに下記エラーが出力されるようになった
error内容
重大: Unexpected executor death
java.lang.IllegalStateException: cannot create a build with number 10625 since that (or higher) is already in use among [10614, 24093, 24094, 24095, 24096, 24097, 24098, 24099, 24100, 24101, 24102, 24103, 24104, 24105, 24106,
<snip>
26098, 26099, 26100, 26101, 26102, 26103, 26104, 26105, 26106, 26107, 26108]
at jenkins.model.lazy.AbstractLazyLoadRunMap.proposeNewNumber(AbstractLazyLoadRunMap.java:373)
at hudson.model.RunMap.put(RunMap.java:191)
at jenkins.model.lazy.LazyBuildMixIn.newBuild(LazyBuildMixIn.java:176)
at hudson.model.AbstractProject.newBuild(AbstractProject.java:1018)
at hudson.model.AbstractProject.createExecutable(AbstractProject.java:1209)
at hudson.model.AbstractProject.createExecutable(AbstractProject.java:144)
at hudson.model.Executor$1.call(Executor.java:364)
at hudson.model.Executor$1.call(Executor.java:346)
at hudson.model.Queue._withLock(Queue.java:1371)
at hudson.model.Queue.withLock(Queue.java:1232)
at hudson.model.Executor.run(Executor.java:346)
4 08, 2016 6:57:13 午後 hudson.model.Run execute
解決手順
jenkinsのホームディレクトリは、/var/lib/jenkinsの場合です
プロジェクト毎すべてのbuildsディレクトリを削除する
# rm -rf /var/lib/jenkins/jobs/*/builds
削除されたか確認
# ls -lad /var/lib/jenkins/jobs/*/builds
ls: /var/lib/jenkins/jobs/*/builds にアクセスできません: そのようなファイルやディレクトリはありません
次回、ビルド番号が1から始まるように上書き
# for i in `ls /var/lib/jenkins/jobs/*/nextBuildNumber` ; do echo "1" > $i ;
done
すべて1か確認
# cat /var/lib/jenkins/jobs/*/nextBuildNumber
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
最後に、jenkinsプロセス再起動
/etc/init.d/jenkins restart
他の考えられる原因
ノードがオフラインになっている
「Jenkins の管理」> 「ノードの管理」でオフラインになっていないノードがないか確認
DISK空き容量不足
Jenkinsが搭載されているサーバのDISK容量(もしくはinode)が枯渇している場合
jenkinsを定期実行して、しばらくすると失敗するようになり、調べたらまさかのinode枯渇。。
ビルド履歴を一定期間で削除するよう設定しないとダメです。
ジョブ毎の設定>古いビルドの破棄にチェック
ビルドの保存日数、ビルドの保存最大数が設定可能です。
以上