読者です 読者をやめる 読者になる 読者になる

kintone REST APIを使ってJenkinsの自動バックアップ

開発環境

ガルーンチームの川向です。

kintone APIは簡単に実行できて便利ですよね。

というわけで、今回はガルーンチームのkintone APIの活用法の一つとして、 Jenkinsの設定ファイルをkintoneに自動バックアップする方法についてご紹介します。

Jenkins

簡単に説明すると、 定期的にスクリプトを実行してくれるツールです。

ガルーンチームでも日々の開発にJenkinsを使っています。 毎日、製品のビルドや自動テストの実行などに大活躍しています。

このため、もしJenkinsを動かしているマシンが壊れたら大変です。 そこでJenkinsのバックアップをすることにしました。

Jenkinsのバックアップデータ作成

thinBackupというプラグインを使っています。

以下の理由でこのプラグインを使うことにしました。

  • 定期実行できる
  • レストアもしやすい
  • バックアップ中、システムを止めることができる

設定はこちらのようにしています。

thinBackupの設定内容

古いバックアップデータはzipに圧縮するようにしています。 ビルドの成果物やログなどはあまり重要でないのでバックアップしていませんので、 一回のフルバックアップのデータは80KBほどです。

ただ、バックアップデータは同じマシンに保存されています。 もしマシンが吹き飛んだらバックアップデータも消えてしまいます。

バックアップデータをkintoneに自動アップロード

そこで、バックアップデータはkintoneのアプリにアップロードします。

kintoneは4重バックアップされていますので、安心・安全ですね。

アップロード先のアプリはこんな感じです。 backup_dataフィールドにバックアップデータを格納します。 created_atフィールドは、初期値としてデータの登録日が入るようになっています。

アップロード先のkintoneアプリのフォーム

また、APIの認証にはトークンを使っています。 このトークンには「レコード追加」の権限のみ与えています。

自動アップロードはJenkinsのジョブで定期実行しています。 実行する内容は以下のスクリプトです。 一般的なツールを使っていますので、多くの環境で実行できると思います。

APP_ID=XXXX
API_TOKEN=XXXX
URL=https://XXXX.cybozu.com
cd /path/to/backup/directory

# アップロード対象は、古いバックアップデータのみ
for BACKUP_DATA in `ls *.zip | sort` ;
do
 echo "--------------------------"
 echo "Backup: $BACKUP_DATA"

  # ファイルアップロードし、ファイルキーを取得する
  UPLOADRESULT=`curl -X POST -H "X-Cybozu-API-Token: $API_TOKEN" -F "file=@$BACKUP_DATA" -w 'STATUS:::%{http_code}' "$URL/k/v1/file.json"`

  if [ $? -ne 0 ] ; then
    echo "Failed to upload file(curl)"
    exit 1
  fi

  echo $UPLOADRESULT | grep "STATUS:::200" >/dev/null 2>&1
  if [ $? -ne 0 ] ; then
    echo "Failed to upload file"
    exit 1
  fi

  FILE_KEY=`echo $UPLOADRESULT | awk -F'STATUS:::' '{print $1}' | python -c 'import sys,json; print json.load(sys.stdin)["fileKey"];'`

  # 新規レコードを作成し、アップロードしたファイルを紐づける
  UPLOADRESULT=`curl -X POST -H 'Content-Type: application/json' -H "X-Cybozu-API-Token: $API_TOKEN"  -w 'STATUS:::%{http_code}' "$URL/k/v1/record.json" --data "{\"app\":$APP_ID, \"record\":{\"backup_data\": {\"value\":[{\"fileKey\":\"$FILE_KEY\"}]} } }"`

  if [ $? -ne 0 ] ; then
    echo "Failed to add record(curl)"
    exit 1
  fi

  echo $UPLOADRESULT | grep "STATUS:::200" >/dev/null 2>&1
  if [ $? -ne 0 ] ; then
    echo "Failed to add record"
    exit 1
  fi

  rm $BACKUP_DATA
  echo Success
done

少しだけスクリプトを説明します。

kintoneのREST APIでは、 ファイルアップロードするには二つの作業が必要です。

  1. ファイルをアップロードし、ファイルキーを取得する
  2. ファイルキーとレコードを紐づける

このため、curlでのアクセスが2回行われています。

また、curlを実行するとき、-wオプションをつけています。 これで、HTTPのステータスコードを取得し、 APIが正しく実行できたかを調べています。

バックアップ開始!

あとは待っているだけで自動でバックアップされ、 そのデータがkintoneにアップロードされていきます。

kintoneにjenkinsのバックアップデータがアップローされている

まとめ

kintone REST APIを使ってJenkinsの自動バックアップを行う方法をご紹介しました。

kintoneのAPIは簡単に使えるんだなと思っていただけると嬉しいです。

今回はkintoneのAPIの紹介でしたが、いつかはガルーン APIの紹介もしたいと思います。