前説
-
今回入れようとした問題のプラグイン
https://jenkins.io/projects/blueocean/
ナウいPipelineツール
-
環境のJenkinsのバージョンというと1.6。古い
$ curl -v --silent http://xxx.xxx.xxx.xxx:8080 2>&1 | grep X-Jenkins:
< X-Jenkins: 1.638
1. 現象
- 上記のBlueOceanプラグインを入れたところ、依存関係の関係で下記の図のプラグインもアップデータしてしまった。※本当は警告でてたら入れちゃダメ
/var/log/jenins/jenkins.logを見ると下記のようなログが流れており色々なプラグインが入っている。
/ver/log/jenins/jenkins.log
Mar 07, 2018 7:16:29 PM hudson.model.UpdateSite$Plugin deploy
WARNING: Adding dependent install of blueocean-rest for plugin blueocean-pipeline-editor
Mar 07, 2018 7:16:29 PM hudson.model.UpdateSite$Plugin deploy
WARNING: Adding dependent install of blueocean-commons for plugin blueocean-rest
Mar 07, 2018 7:16:29 PM hudson.model.UpdateSite$Plugin deploy
WARNING: Dependent install of blueocean-commons for plugin blueocean-pipeline-editor already added, skipping
Mar 07, 2018 7:16:29 PM hudson.model.UpdateSite$Plugin deploy
WARNING: Adding dependent install of pipeline-model-definition for plugin blueocean-pipeline-editor
Mar 07, 2018 7:16:29 PM hudson.model.UpdateSite$Plugin deploy
WARNING: Adding dependent install of credentials-binding for plugin pipeline-model-definition
~中略~
2. 一時対応
-
とりあえず/ver/log/jenins/jenkins.logや依存関係でアップデートしたプラグインをヒントに、依存関係で入れてしまったプラグインのバージョンをひたすらGUI上から戻してみる。(ダウングレード)
(例)
3. 最終対応(結果的に直ったやつ)
参考 : http://www.ringohub.com/entry/2018/01/17/145618
- jenkinsのプラグインを管理している「/var/lib/jenkins/plugin/」配下を見ると1つのpluginについて下記の3つのファイルが存在していた。普通は2個で+.bakができていた。
- {plugin_name}
- {plugin_name}.jpi (zip)
- {plugin_name}.bak (zip)
- →{plugin_name}.bakが一つ前のバージョンなのでこれを見るように修正します。(unzipします)
修正手順
1.「/var/lib/jenkins/plugin/」の中で修正前(1日前)にアップデートしたファイルを可視化します。
$ find . -maxdepth 1 -mtime -1 | grep -v ".jpi" | grep -v ".bak" > target.list
上記で引っかかったファイルアップデート対象のプラグインファイルです。
2.「1のファイルをアップデートするシェル」を用意します。
run.sh
# !/bin/sh
echo $1 >> result.log // リストが全て修正されているかカウントします。
mv $1.jpi $1.jpi.latest // jpiを.latestとして参照をなくします。
mv $1.bak $1.jpi // bakが一個前のプラグインのバージョンのためこれを参照させます。
mv $1 $1.latest //既存の参照先ディレクトリを.latestとして参照をなくします。
unzip $1.jpi -d $1 // 4行目で.bak→.jpiをunzipで解凍します。
3.「run.sh」を実行します
$ cat target.list | xargs -I{} ./run.sh {}
$ wc -l result.log
// ここでtarget.listと件数が一致していたら大丈夫なはずです。
4.「Jenkinsを再起動します」
$ kill -9 <PID> // ps aux | grep jenkinsでPIDを確認しておく。
$ service jenkins start
# service jenkins restartでも可
結果 → 直りました