GitHubやBitBucketのリポジトリの変更をサーバに自動反映する

f:id:haru_skywalker:20140809000444p:plain

今回やりたかったこと

GitHubやBitBucketで、Git管理してるWordPressのソースファイルを、masterにpushしたら自動でステージング環境(or テスト環境)にアップしたい。手動でSFTPとかするの、死ぬほどめんどいしミスる。手動、ダメ絶対。
WordPressの案件みたいな、規模が小さくて全部一人で面倒見なくてはいけないような仕事は、とにかく手動部分を減らしたい、というのが今回の背景です。

まとめると今回やりたかったことは以下の2点。

  1. BitBucketの特定のブランチが変更されたら、ステージング環境に同時に反映させたい
  2. 本番環境への反映は手動。ただしブランチのリビジョンを指定してポチっとな、で反映させたい

利用したものたち

たったこれだけ。超簡単。
dploy以外にも色々あるけど、簡単かつローカルの設定が一切不要、かつ無料で使える、というのが決め手でこれにしました。
dployがどんなものかを知りたい人や、っていうかさっきからチミ何言ってるの?と思った方は、まずはこちらのスライドを見たら良いかと思います。

【参考】
WordPress サイト制作におけるデプロイメントを考える ~Git とデプロイメントサービスの活用~
http://www.slideshare.net/torumiki/20140607-wpkansai-wordpressdeployment

設定など

説明するまでもないほど簡単だった。

リポジトリの入力

最初に、GitHub / BitBucket / Self-hosted の3択から使っているリポジトリを選びます。self-hostedも選べるあたりがまず素敵すぎる。Gitだけでなく、Subversionにも対応してます。

f:id:haru_skywalker:20140808224739p:plain

General setting

リポジトリを選択していくと、接続確認みたいな画面になるのでしばらく待つ。コミットログが多いと結構待たされるような感があるので、ここはお茶でも飲みながらゆっくり待つ。
無事に接続されたら、画面に従って進んでいくと、いよいよデプロイに関する設定画面に。
Manualにすれば手動でデプロイ、Automaticにすれば、選択したブランチに変更があった時に自動でデプロイ、という感じになるので私の場合はまずステージング環境の設定としてAutomaticを選択。オプションでHipChatに通知とかも飛ばせるみたいで超ベンリ。

f:id:haru_skywalker:20140808173802p:plain

接続先サーバーの選択

色々選べますが、私の場合はSFTPを選択。

f:id:haru_skywalker:20140808225524p:plain

接続先サーバーの設定

もしつまずくとしたら、「path in repository」と「Remote path」かな、と思うので一応書いておきます。

path in repository
リポジトリで管理しているファイル構成のうち、このディレクトリ以下を対象にしたい、みたいな時にそのパスを入力する。例えばWordPressのソースを丸ごと(wp-config.phpなども含めて)全部リポジトリに入れているけど、デプロイするのは特定のテーマファイルのフォルダだけにしたい場合には、path in repository に

/wp-content/themes/テーマのフォルダ名  

このようなパスを入力する。オプションでデプロイしたくないファイルの指定も出来たりするので(exclude files & directoriesの欄)、結構色々と細かく設定が出来る。素敵。

Remote path
こっちはサーバ側のパス。上記の例だと、サーバー側のテーマフォルダまでのパスを入力する。

f:id:haru_skywalker:20140808234442p:plain

この次の画面で、オプションを設定出来るのですが、シェルでさらにデプロイ時に何か処理を追加出来たり、web-hook なる機能があって、そちらでも色々と何か出来る模様。何が出来るのかまでは詳しく見てないので、詳細はこちらをご覧ください。
http://support.dploy.io/customer/portal/articles/1302306-how-do-i-trigger-pre--and-post-deployment-web-hooks-

ハマったところ

今回、鍵認証のみのSFTPのサーバを利用しているため、そこの設定にちょっとハマったのでメモ。
鍵認証SFTPの人は、こんな手順で設定すれば出来ると思います。

  1. 接続サーバーの設定画面のところで "Use public key for authentication" を選択
  2. 「download the key」というリンクが出てくるので、そこから公開鍵をダウンロード
  3. アップ先のサーバーの、~/.ssh/authorized_keys にダウンロードした公開鍵を追記

~/ はSFTPユーザーのホームディレクトリです。当たり前ですが念のため。
この辺はちゃんと設定画面の補足説明に書いてあります。"Learn about public key authentication" というリンクをクリックすれば、けっこう親切な説明が出てくる。他の欄でも補足説明がしっかりあって、見てみると結構親切に書いてあるので、ほぼ迷うことなく設定出来ます(英語だけど)。こういうところもかなり素敵。

さいごに

試してみた感じ、BitBucketにpushしてから、ステージングに変更ファイルがアップロードされるまでに、即時の場合もあれば2〜3分ほどかかった時もあるけど、実利用には十分かなと思っています。

というわけで、思った以上に簡単に実現出来てしまいました。リポジトリが1つだけなら、無料枠でここまでの機能を利用出来るのが本当に素敵です。
便利なのでこのままでも良いのですが、このような外部サービスを使わなくても、git hook で同じような事が実現できるっぽいことを教えてもらったので、そっちも試してみたいと思います。