ブログ

ryuzeeによるブログ記事。不定期更新
アジャイル開発に取り組むチーム向けのコーチングや、技術顧問、認定スクラムマスター研修などの各種トレーニングを提供しています。ぜひお気軽にご相談ください(初回相談無料)

コマンドラインから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に配置されます。