Bitbucketを使ってFTPに自動でデプロイする方法「bitbucket-sync」

FTP上からgitを自動デプロイできるツール「bitbucket-sync」の紹介です。

MontBlanc.です。

最近会社のエンジニアさんにGitでプッシュすると自動的にサーバーにアップできる仕組みを構築してくれました。
そこで自分でも自動化できたら良いのに・・・、と思い調べてみると
bitbucket-sync」でいけるみたいなので試してみました。

用意するもの

Bitbucketアカウント

https://bitbucket.org/ のアカウントを発行しておきます。

レンタルサーバー

今回は「さくらのレンタルサーバー スタンダード」
phpが使用できるサーバーであればどこでもいけそうな予感。

導入方法

bitbucket-syncをダウンロード

まずは下記から bitbucket-sync をダウンロード
https://github.com/alixandru/bitbucket-sync/
フォルダが長い名称になっていますが、bitbucketやbitbucket-syncなどリネームしておきましょう。

config.phpをいじる

ダウンロードしたフォルダ内にある”config-sample.php”をconfig.phpにリネームしてエディタで開きます。
以下のように書き換えます

// Bitbucketのアカウントを設定
'apiUser' => 'Bitubucketアカウント名',
'apiPassword' => 'Bitubucketログインパスワード' ,

// Bitbucketのアカウントを設定
'requireAuthentication' => true, //falseをtrueに変更
'deployAuthKey' => '',
'gatewayAuthKey' => 'hogehoge', //自由に入力(あとで使います)

// Bitbucketのアカウントを設定
$DEPLOY = array(
    'リポジトリ名' => '/home/アカウント名/www/mysite/', 
);

アカウントはログイン時に使うメールアドレスではなく、登録時やURLに表示されているアカウント名になるのでご注意。

FTPにアップロード

bitbucket-syncをデプロイしたいディレクトリへアップロードします。
アップロード場所は人それぞれみたいのようですが、僕はドメイン直下に入れてみました。
gitの本来の考え方だとgitで管理しているフォルダにgitが関与していないファイルは入れるのはあまり良くないことなのですが、今回は使用しているディレクトリの都合で入れています。

/home/アカウント名/www/mysite/ <!--対象ディレクトリ-->
/home/アカウント名/www/mysite/bitbucket-sync/ <!--bitbucket-syncを入れる場所-->

アップロード後に、デプロイテストとして、上記のディレクトリ+下記URLへアクセス
http://{mysite-domain}/bitbucket-sync/deploy.php?setup={リポジトリ名}

ちゃんと繋がった場合は少しの読み込み時間のあと”Finished deploying {リポジトリ名}.“と表示され、
config.phpで指定したリポジトリ名に紐付いたFTPのパス先にbitbucketのデータが流し込まれます。

BitbucketからGit Pushができるように設定

Bitbucketにログインをしてリポジトリを選択、メニューから[Setting]→[Services]を選択、
Select a Serviceから”POST”を選びダイアログに下記を入力します。
http://{mysite-domain}/bitbucket-sync/gateway.php?key=hogehoge(←自由に入力したアレ)

これで設定が完了。
これで通常通りPushを行えば通知内容が設定したFTPサーバーに自動的に反映されるようになります。

いいところ

何が良いって面倒がサーバーの設定が必要なく気軽に行えるところです。
本来、gitをサーバーで利用しようとするとVPSサーバーにgitをインストールするところから始める必要があるのですが、
ここではレンタルサーバーでOKで、且つgitをインストールする必要があります。
ただ「gitの監視下におかれている」という状況ではなく、あくまでbitbucketから送られた内容を任意の場所へコピペする、というのは挙動っぽいので、git本来のバージョンを戻すという行為には向いていなそうです。
そこら辺は利用しながら試してみたいと思いますb

ちょっとつまづいたところ

WebserviceなのかWebhookなのか

WEBサイトで他の方が行っている内容を色々と見ながら実装していたですが、どうも人によって実装方法が違うことが気になりました。
アカウント名をメールアドレスにしているところもあれば、Settingのwebhookを使用しているところなど。。。
私の場合、webhookで操作してもうまくいかず、Servicesに入れることで解決しました。

自分のアカウントに登録されているリポジトリしか使えない罠

Bitbucketには複数人でリポジトリを管理できるグループ機能や複数のリポジトリを一束にするプロジェクト機能というのがあるのですが、これらに紐付いているリポジトリでは利用ができなそうです。
実際、グループがオーナーのリポジトリを読み込もうとしていたのですが、飛び先が違うとエラーが置きました。
あくまで自分のプロフィールページに表示されているリポジトリのみが対象のようです。

まとめ

今まで自分が何を更新したのか確認して、ちまちまFTPにアップロードすることが続いていましたが、
今後はその手間を省くことができそうです。
自動化楽しす〜。