2012-03-13
Git で Jenkins のバックアップをしてみる
先日突然会社で使ってる Jenkins が起動しなくなってしまいました。さすがにもう二度とそんな思いはしたくないので、バックアップを取ることにしました。
Backup Plugin - Jenkins - Jenkins Wiki を使ってもいいんですが、git 使えば差分バックアップになるし、好きな時点に戻せて素敵なんじゃないかと思って git を使ってバックアップを取ることにしてみました。
この記事はその時のメモみたいなものです。
リポジトリの作成
まずは git のリポジトリを作ります。せっかくなのでスクリプトコンソールを使ってみます。スクリプトコンソールを開いて、以下を実行します。
dir = System.properties["JENKINS_HOME"] def git = { Object[] cmd -> println new ProcessBuilder(["git"] + cmd.toList() as String[]).directory(new File(dir)).start().text } git "init" git "config", "user.name", "Jenkins Backup" git "config", "user.email", "jenkins@${InetAddress.localHost.hostName}" new File("${dir}/.gitignore").text = """\ *.log *.log.? *.log.?? jobs/*/workspace jobs/*/builds """ git "add", "--all" git "commit", "-m", "Initial commit"
これで /var/lib/jenkins に git のリポジトリができます。除外対象は workspace, builds とログファイルにしました。
バックアップの設定
次に Hudson環境のバックアップ - ふぞろいのGENGOたち を参考にして、Exclusive Execution Plugin を入れて backup job を作ります。job は以下のように設定します。
- ソースコード管理システム: なし
- ビルドトリガ: 定期的に実行
- スケジュール: @daily
#!/bin/sh cd $JENKINS_HOME git add --all && git commit -m "$BUILD_TAG" git gc
以上で準備完了です。あとはためしにビルド実行をしてみて、青くなればめでたしめでたしです。
直接 git を操作するとき
Jenkins をパッケージで入れている場合、多分Jenkins は jenkins ユーザのものになっていると思います。スクリプトコンソールで作ったリポジトリも jenkins ユーザーで作られているので、以下のように、sudo でユーザを指定してあげれば大丈夫だと思います。
sudo -u jenkins git ...
最後に
登録も自動化したければ jenkins-cli を使って groovy, install-plugin, create-job コマンドあたりを使えばできるはずです。
