コマンドラインからDropboxを操作する方法 (+Jenkinsとの連携)
前回のエントリでは、ReVIEWとJenkinsを組み合わせてPDFを自動でビルドする方法について説明しました。今回は更に進んで、ビルドされたPDFをJenkinsサーバから自動でコマンドライン経由でDropboxに保存する方法について説明します。 なお、ここで説明する内容は別にJenkinsと連携しなくても使えます。 例えば、サーバのファイルを定期的にバックアップしたり、シェルスクリプトの中で呼び出したりといったことが可能です。
Dropbox API Commandの導入
コマンドライン経由でDropboxを操作するためには、Dropbox API Commandと呼ばれるツールを使うのが簡単です。 githubで公開されており、ライセンスはMITライセンスです。 https://github.com/s-aska/dropbox-api-command
インストール
Dropbox API Commandはperlで書かれています。インストール中にCPANのモジュールをビルドしたりするので、gccやmakeなどが導入されている必要があります。Ubuntuの場合は以下のようになります。
sudo apt-get install make gcc libssl-dev wget
wget https://raw.github.com/miyagawa/cpanminus/master/cpanm
sudo perl cpanm App::dropboxapi
これでインストールは完了です。
Dropbox側の設定
Dropboxを操作するために、App KeyやApp Secretを始めとしていくつかの設定が必要です。 まず、ブラウザで、https://www.dropbox.com/developers にアクセスし、左メニューからMy Appを選択します。 以下のように表示されます。
ここでCreate an appボタンをクリックします。 以下のような画面が表示されますので適当に入力します。なお、Access levelについてはセキュリティ上Full Dropboxを避けておいたほうが良いと思います。
以上で、Createボタンをクリックしてください。App keyとApp secretが発行されます。
これでDropbox側の下準備は終わりました。
Dropbox API Commandの設定
コマンドラインから以下を実行します。
dropbox-api setup
すると以下のように順番に質問されますので、API KeyやAPI SecretやAccess levelを設定します。
Please Input API Key: ***************
Please Input API Secret: ***************
Please Input Access type
a ... App folder - Your app only needs access to a single folder within the user's Dropbox
f ... Full Dropbox - Your app needs access to the user's entire Dropbox
[a or f]: *
URL: http://api.dropbox.com/0/oauth/authorize?oauth_token=***************&oauth_callback=
Please Access URL and press Enter
OK?
Access levelの指定をした後に、URLが表示されるので、ブラウザにそのURLを貼り付けて、認証を行います。
ここで許可をクリックしてください。次の画面で正しく設定が終わったことを確認できたらコマンドラインに戻ります。
Please Access URL and press Enter
OK?
とありますので、Enterを押下します。 以下のように表示されれば設定は終了です。
success! try
> dropbox-api ls
> dropbox-api find /
接続情報について
上記で入力されたApp Keyを始めとする各種の設定値は、ホームディレクトリ以下に
.dropbox-api-config
という名前で保存されます。このファイルをコピーすれば、他のマシンでもすぐに利用できます。
Dropbox API Commandの使い方
コマンドの使い方は簡単です。dropbox-api help とすれば利用可能なコマンドが表示されます。
Usage: dropbox-api <command> [args] [options]
Available commands:
setup get access_key and access_secret
ls list directory contents
find walk a file hierarchy
cp copy file or directory
mv move file or directory
mkdir make directory (Create intermediate directories as required)
rm remove file or directory (Attempt to remove the file hierarchy rooted in each file argument)
put upload file
get download file
sync sync directory (local => dropbox or dropbox => local)
uid get accound uid
See 'dropbox-api help <command>' for more information on a specific command.
よく使うのは、putとgetとrmくらいだと思います。 putはファイルをアップロードする際に使います。以下のようになります。 第一引数にアップロードするファイルのパス、第二引数はDropboxのパスになります。Access Levelをappに指定している場合は、指定したアプリケーションフォルダのトップが起点になります。
dropbox-api put /tmp/hoge.txt dropbox:/
削除する場合は
dropbox-api rm /hoge.txt
Jenkinsと組み合わせる
ここまでやってきたまとめとしてJenkinsと組み合わせます。 前回のエントリではgithubに配置しているReVIEWのソースをPDFにビルドするところまで自動化しましたが、さらに、Dropboxにアップロードするところまで連携します。
下準備
Jenkinsを動作させているサーバにDropbox API Commandをインストールしてください。手順は上に書いた通りです。 次に、ここまでで作成された、ホームディレクトリにある.dropbox-api-configファイルをJenkinsサーバのjenkinsユーザーのホームディレクトリに配置してください(通常は/var/lib/jenkins)。 ここまでできたらJenkinsサーバ上で、jenkinsユーザーになって、
dropbox-api ls
を実行してください。正常に応答が返ってくるか確認します。
Jenkinsのビルドの設定
前回のエントリのビルドの設定の末尾に変更を加えます。
具体的には最後にdropbox-api put を使ってビルドされたPDFをアップロードしています。
cd ${WORKSPACE} && export PATH=$PATH:/usr/local/review/bin && review-pdfmaker sample.yaml && mkdir -p ${WORKSPACE}/build && mv sample.pdf ${WORKSPACE}/build/ && dropbox-api put ${WORKSPACE}/build/sample.pdf dropbox:/sample.pdf
以上で、ビルドをしてください。設定がうまく行っていれば、ビルドされたファイルはDropboxに配置されます。