2013年1月25日金曜日

バックアップツールとしてのjenkins

今やCI(Continuous Integration)の定番ツールとなりつつあるjenkins。構築、テスト、デプロイ等を自動化で安定させることで生産性を大幅に上げてくれる。
弊社でも様々なプロジェクトで使用しており、もはや必須のツールとなった。

Jenkinsの柔軟性が高く、Maven、AntだけでなくPhing等のビルドツールだけでなくシェルスクリプトも使える。(もちろんUNIXベースだが)


  • シェルスクリプトが使える。
  • それぞれのジョブの作業場所(ワークスペース)が使える。
  • ジョブの成功・失敗の判定処理が行える。
  • 失敗時のアラート処理
  • ジョブの成果物を管理できる。

これらの機能を考えるとJenkinsはバックアップツールとしても非常に有用である。

実際、稼動しているサーバーのバックアップに以下のシナリオを適用している。

前提

  • 対象となるホストはバックアップ用のアカウントで鍵認証によるSSH接続。
  • バックアップのスクリプトはSubversionで管理。


シナリオ

  1. ジョブでスクリプトをSubversionからワークスペースに展開
  2. ジョブのタスクにスクリプトの実行を設定
  3. スクリプト内でrsyncで対象ホストからバックアップの対象となるファイルをワークスペースにコピー。
  4. tarコマンドで1つのアーカイブに圧縮。
  5. ジョブのビルド後のタスクに、作成したアーカイブを成果物として指定
  6. 失敗時はアラートでメールを送信

生成したアーカイブをジョブの成果物として登録することでローテートと同じ機能を実現できる。Jenkinsではジョブの設定でビルド数(または成果物)の保存日数またはその個数を指定することができる。また、成果物をJenkinsの画面からすぐにダウンロードできることも便利だ。

データベースのバックアップ等、当該ホストで処理が必要なバックアップはJenkinsからscpを使って当該ホストへバックアップ用のスクリプトを送信した後、ssh経由で実行させ出来上がったファイルをワークスペースにコピーしている。
これにより当該ホストでの処理とジョブの処理を同期させることが可能となる。

また、スクリプトを使う場合、Jenkins側で以下のような有用な環境変数が自動的に設定される。



BUILD_NUMBER
当該ビルドの番号。例 "153"
BUILD_ID
当該ビルドID。例 "2005-08-22_23-59-59" (YYYY-MM-DD_hh-mm-ss)
JOB_NAME
ビルドのプロジェクト名。例 "foo"
BUILD_TAG
文字列 "jenkins-${JOB_NAME}-${BUILD_NUMBER}"。簡易な識別子として、リソースファイルやjarファイルなどに付与するのに便利です。
EXECUTOR_NUMBER
このビルドを実行している現在のエグゼキューターを識別する(同一マシンの中で)ユニークな番号。"ビルド実行状態"に表示されている数字ですが、1ではなく0から始まる数字です。
NODE_NAME
ビルドが実行されるスレーブの名称。マスターで実行される場合は"master"。
NODE_LABELS
ノードに設定されたラベルのリスト(スペース区切り)。
WORKSPACE
ワークスペースの絶対パス。
JENKINS_HOME
The absolute path of the directory assigned on the master node for Jenkins to store data.
JENKINS_URL
JenkinsのURL。例 http://server:port/jenkins/
BUILD_URL
このビルドのURL。 例 http://server:port/jenkins/job/foo/15/
JOB_URL
このジョブのURL。 例 http://server:port/jenkins/job/foo/
SVN_REVISION
Subversion revision number that's currently checked out to the workspace, such as "12345"
SVN_URL
Subversion URL that's currently checked out to the workspace.



Jenkinsは使い方次第で様々な用途に使える。優秀なバックアップツールとしてもぜひ活用してみてはどうだろうか?






0 件のコメント:

コメントを投稿