jenkins 2.0をgitでバックアップ・復元する話です。
jenkinsとバージョン管理
jenkinsはcronの代替品や、エンジニア以外の人にバッチ処理を走らせるための手軽なwebインタフェースとしてはかなり便利です。万が一のために、jenkinsをバックアップ・復元するソリューションもほしいですが、そういった標準機能は未だに存在していません。
大規模のjenkinsならVMイメージやdocker、どちらかと言うとインフラ構成管理のやり方でなんとかなるだろうけど、たった一台のjenkinsの場合、もっと手軽なソリューションがほしくなりますね。できればファイル同期すれば新しいディレクトリーに展開できるようにしたい。というわけで、真っ先にgitに思いつきます。
しかし、jenkinsの設定をgitで管理するには若干強引なところがあります。commitする範囲をファイル名やディレクトリ構造で判断しにくいからです。とはいえ、.gitignore
で頑張ってファイルを1個ずつ外す人1 2もいたので、自分も試してみました。
秘伝の.gitignore
というわけで、gitでうまく運用できるかは分からないけど、とりあえずやってみました。自分で一から.gitignoreを作成するのも億劫なので、参考記事[1]のリストを元に、Jenkins 2.0を標準インストールした直後の状態に合わせてみました:
# 一般的に除外するもの
*.swp
# jenkins本体
*.jar
war
# ログ、キャッシュ、内部のバックアップ、ローカルの情報
*.log
*.bak
logs/
org.jenkinsci.plugins.github.GitHubPlugin.cache/*
jenkins.model.JenkinsLocationConfiguration.xml
# ユーザ、権限、鍵
.owner
identity.key*
secret.key*
secrets
users
# 更新、プラグインの展開先
plugins/*/
updates
# ジョブ
jobs/*/*
!jobs/*/config.xml
workspace
# 初期化の状態
jenkins.install.*
jenkinsのgitレポジトリ作成とデプロイ
既存のjenkinsからgitレポジトリを作る
-
$JENKINS_HOME
でgit init
- 上記の.gitignoreを配置し、ignoreされていないものをすべてadd & commitする
新しい場所で展開する
jenkins daemonを起動する前に、新しい$JENKINS_HOME
で下記の作業をする:
-
$JENKINS_HOME
でgit clone
rm -rf *
- jenkins daemonを起動し、setup wizardを通過する
- jenkinsのdashboardが見れるようになったら、
$JENKINS_HOME
でgit reset --hard origin/master
で無理やり最新状態にする - jenkinsを再起動する
- 再起動が終わったら、ジョブと設定がちゃんと展開されたことを確認する
一度rm
する理由は、jenkins 2.0は初回起動時に$JENKINS_HOME
の状態をいろいろ確認したり初期化したりするので、そこで変な依存性を発生させたくないからです。実際、clone後そのまま起動するとsetup wizardが飛ばされます。
参考記事
-
VERSION CONTROL YOUR JENKINS SERVER CONFIGURATION WITH GIT https://www.coveros.com/version-control-your-jenkins-server-configuration-with-git/ ↩
-
Jenkinsのバックアップとリストアについてメモ http://qiita.com/tq_jappy/items/3654059d09a4896ae598 ↩