drone.ioを使って継続的にビルド & デプロイを行う(ssh編)

継続的インテグレーションなサービスとして、最近では drone.io を耳にすることがあります。

Continuous Integration · drone.io

drone.io は現時点では github, bitbucket, google codeと連携できます。

Free 版では public プロジェクトしか使えませんが、有料プランを選べば private プロジェクトが使用可能になったりConcurrentに動かせるようになったりするようです。
(private リポジトリが無制限に使える unlimited プランが現時点で ($ 49.00 / month) と、割と安価な印象?)

drone.io ではいくつかの環境への deploy も行えるようになっています。
今回は、ssh 経由で deploy を試してみました。

プロジェクトのセットアップ

New Project からリポジトリの選択、言語の選択を順次行っていきます。
ここまではボタンをポチポチ押すだけなので簡単です。

最後に、ビルドコマンドを記述します。
編集前には選んだ言語にあわせたひな形が記述されています。
これを各プロジェクトにあわせて修正します。
環境変数が必要な場合は、後から "Build & Tests"の"Environment Variables"に記述します。

言語によってはバージョンの指定が可能です。

余談:Status Badge

"Status Badges"に記載されているリンクをドキュメントに記述することで、(コードホスティングサイト側が対応しているのであれば)Status Badgeを表示させることができます。
GitHub + Travis CIなリポジトリでよく見るアレですね。

PNG Format と Markdown が用意されています。
Markdownを利用している方はドキュメントにそのまま貼り付けるだけです。

私はrstを使っているので、

.. image:: https://drone.io/hoge/pocketberserker/fuga/status.png

と記述してホスティングサイト上で表示させています。

sshでデプロイ

下記ページを読めばだいたいやるべきことがわかります。

SSH Deployments · drone.io

  • User ... デプロイ時に使用するユーザ名
  • Host ... デプロイ先のホスト名(or IPアドレス)
  • Remote Path ... プロジェクトのコピー先
  • Remote Commands ... プロジェクトのコピー後に実行したいコマンド
  • Branch(Option) ... どのブランチの時にデプロイを実行するか。何も記述しない場合はすべてのブランチを対象。コンマ区切りで複数指定。

ssh + rsync でプロジェクトのコピーを行うため、下記に注意する必要があります。

  1. パスワードなしでsshログインするため、"Deployment Key"に記述されている文字列をデプロイ先の ~/.ssh/authorized_keys ファイルに記述する必要がある。
  2. リポジトリディレクトリとRemote Pathディレクトリを rsync で同期させるため、リポジトリ側に存在しないファイルはおそらく消えます。

試した環境

私は以下の構成で試しました。

まとめ

ビルド用スクリプトとデプロイ用スクリプトを用意できれば、そんなに手間をかけずに自動デプロイできるようになりました。
環境変数を利用する場合はもう少し複雑なことをやらなければならないかもしれませんが、用途を絞れば色々と使い道があるのではと思いました。