Masteries

技術的なことや仕事に関することを書いていきます.

Jenkinsの設定をバックアップする

私が今所属しているReactioチームでは日々, デプロイにテストにバックアップにと便利にJenkinsを使っている訳ですが, 形あるものはいずれ壊れる運命にあります. もし, Jenkinsが壊れてしまったら... 考えたくないですね.

というわけで, Jenkinsが壊れてしまう前に, Jenkinsの設定をバックアップする仕組みを導入することにしました.

方法

Jenkinsの設定をバックアップする方法はいくつかあるようですが, 今回は@sue445さんのsue445/jenkins-backup-scriptを使ってみることにしました.

今回参考にさせて頂いたJenkinsのバックアップとリストアについてメモ - Qiitaという記事では, 他にもthinBackupというJenkinsのプラグインも紹介されていました. こちらはJenkinsのプラグインなので, ブラウザからポチポチとバックアップや復元が出来るのが嬉しいですが, プラグインの設定についてはバックアップの対象外とのことだったので断念しました.

導入

忘備録として残しておきますが, sue445/jenkins-backup-scriptのREADME.mdが画像付きで非常に丁寧に導入方法を解説しているので, こちらを見れば十分に導入することができます.

「Exclusive Execution Plugin」をインストールする

まず, Execlusive Execution Pluginをインストールします. このプラグインは, 名前の通りジョブを排他実行するためのプラグインです.

バックアップ用のジョブを作成する

続いて, Jenkinsで適当なバックアップ用のジョブを作成し, 設定します.

f:id:papix:20160208191155p:plain

  • ビルド・トリガ
    • 「定期的に実行」で, 適当なタイミングでジョブが実行されるようにしておく

f:id:papix:20160208191204p:plain

  • ビルド環境
    • 「Exclusive Execution Plugin」のインストールが成功していると, 「ビルドを排他的に実行」というチェックボックスが追加されるので, これをオンにする

f:id:papix:20160208191215p:plain

  • ビルド
    • 「シェルの実行」を追加し, 以下のスクリプトを実行するようにする
./jenkins-backup.sh $JENKINS_HOME /tmp/jenkins_backup_`date +"%Y%m%d%H%M%S"`.tar.gz

これで設定は完了です. ジョブを実行すると, /tmp以下にtar.gzで固められたバックアップデータが生成されるはずです.

なお, ここではとりあえずの動作確認用に/tmp下にバックアップを配置するように記述していますが, 実際に利用する場合は言うまでもなく適当なディレクトリに配置するようにしましょう.

復元

README.mdに書かれている通りにすれば, 大丈夫と思われます(幸いにもまだJenkinsが壊れていないので試していない...).

バックアップの設置場所や, Jenkinsのインストール先は適宜読み替える必要があります.

sudo /etc/init.d/jenkins stop
cd /path/to/backup_dir
tar xzvf backup.tar.gz
sudo cp -R jenkins-backup/* /path/to/jenkins/
sudo chown jenkins:jenkins -R /path/to/jenkins/
sudo /etc/init.d/jenkins start

まとめ

上記の設定では, バックアップデータはJenkinsが設置されているサーバにのみ存在することになるので, サーバそのものが壊れてしまった場合復元できなくなってしまいます. 念には念を入れるのであれば, 生成したtar.gzをS3などにコピーしておくなどの処理が必要でしょう.

とにもかくにも, これだけの作業量でJenkinsのバックアップが簡単に取得出来るのは非常にありがたいです. Jenkinsのバックアップをしていない方はこの機会に是非導入してみるのはいかがでしょうか?