LoginSignup
11
13

More than 5 years have passed since last update.

Jenkins使って良くやるバックアップ (rsync) 作業

Posted at

基本

わたしは、Jenkinsでrsyncを使ったバックアップをたくさん実施してます。
定型作業まで落ちている場合は、cronで問題ありませんが、特に、移行を控えているときとかに良く利用します。

理由

  • 移行の期間で、どれくらい同期に時間がかるか見積もりたい
  • こまめにrsyncさせておいて、実際の移行時のデータ同期をできるだけ手短かに済ませたい
  • dry runモードでどれくらいファイルが同期するか確認したい
  • rsyncをまっさらな感じで実施したい
  • パターンは同じだけど、ターゲットのホスト/ディレクトリをパラメータで切り替えして実施したい(本番とかステージングとかを切り替える)

設定

ちょっとばかり載せます。

  • よくパラメータ指定するもの:
    • バックアップ用ディレクトリ
    • 対象サーバ (たいていssh)
    • rsyncのオプション

特に、rsync -n オプションは良く利用します。(うっかり上書きの悲劇を過去に経験しているので)

jenkins-config.png

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

11
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
13