基本
わたしは、Jenkinsでrsyncを使ったバックアップをたくさん実施してます。
定型作業まで落ちている場合は、cronで問題ありませんが、特に、移行を控えているときとかに良く利用します。
理由
- 移行の期間で、どれくらい同期に時間がかるか見積もりたい
- こまめにrsyncさせておいて、実際の移行時のデータ同期をできるだけ手短かに済ませたい
- dry runモードでどれくらいファイルが同期するか確認したい
- rsyncをまっさらな感じで実施したい
- パターンは同じだけど、ターゲットのホスト/ディレクトリをパラメータで切り替えして実施したい(本番とかステージングとかを切り替える)
設定
ちょっとばかり載せます。
- よくパラメータ指定するもの:
- バックアップ用ディレクトリ
- 対象サーバ (たいていssh)
- rsyncのオプション
特に、rsync -n オプションは良く利用します。(うっかり上書きの悲劇を過去に経験しているので)
shellでの記載
こんな感じで、shellを設定しています。(下記は、ローカルのディレクトリにデータを pull する形のrsync)
if [ ${DRY_RUN} = "true" ]; then
sudo rsync -avnz --delete -e ssh ${SOURCE_SERVER}:/{$SOURCE_DIR}/ {$BACKUP_DIR}
else
sudo rsync -avz --delete -e ssh ${SOURCE_SERVER}:/{$SOURCE_DIR}/ {$BACKUP_DIR}
fi
設定についてのメモ
jenkinsの設定ではありませんが、パッケージでjenkinsをインストールすると、通常はjenkins ユーザでの実行なので、root権限が必要な操作ができなかったりします。
Jenkinsのサーバに自身に、rootで接続しちゃうスレーブを立てる方法も取ったりしますが、sudoで対応する場合は、このへんを設定してます。
# tty で怒られるのでコメントアウト
# Defaults requiretty
# バックアップに必要なタスクを定義
Cmnd_Alias BACKUP_TASK = /usr/bin/rsync, /usr/bin/ssh, /usr/bin/du
# jenkinsさんには上記タスクはroot権限で実施できるようにする
jenkins ALL = (root) NOPASSWD: BACKUP_TASK