弊社でも様々なプロジェクトで使用しており、もはや必須のツールとなった。
Jenkinsの柔軟性が高く、Maven、AntだけでなくPhing等のビルドツールだけでなくシェルスクリプトも使える。(もちろんUNIXベースだが)
- シェルスクリプトが使える。
- それぞれのジョブの作業場所(ワークスペース)が使える。
- ジョブの成功・失敗の判定処理が行える。
- 失敗時のアラート処理
- ジョブの成果物を管理できる。
これらの機能を考えるとJenkinsはバックアップツールとしても非常に有用である。
実際、稼動しているサーバーのバックアップに以下のシナリオを適用している。
前提
- 対象となるホストはバックアップ用のアカウントで鍵認証によるSSH接続。
- バックアップのスクリプトはSubversionで管理。
シナリオ
- ジョブでスクリプトをSubversionからワークスペースに展開
- ジョブのタスクにスクリプトの実行を設定
- スクリプト内でrsyncで対象ホストからバックアップの対象となるファイルをワークスペースにコピー。
- tarコマンドで1つのアーカイブに圧縮。
- ジョブのビルド後のタスクに、作成したアーカイブを成果物として指定
- 失敗時はアラートでメールを送信
生成したアーカイブをジョブの成果物として登録することでローテートと同じ機能を実現できる。Jenkinsではジョブの設定でビルド数(または成果物)の保存日数またはその個数を指定することができる。また、成果物をJenkinsの画面からすぐにダウンロードできることも便利だ。
データベースのバックアップ等、当該ホストで処理が必要なバックアップはJenkinsからscpを使って当該ホストへバックアップ用のスクリプトを送信した後、ssh経由で実行させ出来上がったファイルをワークスペースにコピーしている。
これにより当該ホストでの処理とジョブの処理を同期させることが可能となる。
また、スクリプトを使う場合、Jenkins側で以下のような有用な環境変数が自動的に設定される。
Jenkinsは使い方次第で様々な用途に使える。優秀なバックアップツールとしてもぜひ活用してみてはどうだろうか?