Bitbucket や GitHub で自動デプロイするためのサンプル PHP スクリプトを拾って改造してみた


GitHub や BitBucket などの Git ホスティングサービスの Hook や Webhook サービスを使って、Git に Push した時、自動的にサーバー側でに最新版の master ブランチを pull するための PHP を拾ってきて、ちょっと改造しました。

大きいプロジェクトであれば、きちんとちた CI/CD サービスを使いましょう。

## 続きはブログ記事で

最初 Qiita を使って書いていたのですが、ちょっと大掛かりになりすぎたので、ブログに移行します。
http://ja.katzueno.com/2019/08/3712/

## 豆知識： Hook とは

Git には、標準で hook と呼ばれる機能があります。アクションの各段階において、シェルスクリプトを実行できるものです。

UNIX系の OS を使っていて黒い画面に詳しい人は、詳しくは、

- 「[7.3 Git のカスタマイズ - Git フック](http://git-scm.com/book/ja/v1/Git-%E3%81%AE%E3%82%AB%E3%82%B9%E3%82%BF
%E3%83%9E%E3%82%A4%E3%82%BA-Git-%E3%83%95%E3%83%83%E3%82%AF)」
- 「[Git hooks まとめ](http://qiita.com/khlizard/items/dfe1ec9d82c0ed5da7c6)」
- 「[git hookでサイトを更新、やってみた](http://qiita.com/fnobi/items/98bd5d1c83c010842733)」

を見ると、いろいろできます。


## 豆知識： Webhook とは

Git の hook は Mac を含めた UNIX 系のPCで黒い画面を使いこなしている人しか恩恵はありませんが、Web関係者で Git を使って楽をしたい人にオススメなのが、GitHub が提供している **Webhooks** や、 BitBucket の **Hooks** 機能です。

例えば GitHub や BitBucket でこの機能を使いこなすと、Git で master ブランチ Push された時に、自動的に本番サーバーに Git の情報を Pull して FTP でアップする必要がなくなります。

これを高度に活用すると、例えば develop という名前のブランチを、開発環境サーバーに自動的に Pull できたり。

また Push された時に、本番や環境サーバーでも Grunt とか Gulp とかの自動タスクをを本番サーバーでも走らせたりなどを行うことが出来ます。


## Webhook を PHP スクリプトを使って、自動的に git pull されるスクリプトを見つけて、ちょっと改造してみた。

いろいろ探してたんですが「[Using Bitbucket for Automated Deployments](http://brandonsummers.name/blog/2012/02/10/using-bitbucket-for-automated-deployments/)」というブログ記事をのサンプルを見つけさせていただきました。

ちと改変しやすいように改造しました。

## サーバー準備

まず、サーバーの準備が必要です。

サーバーには

- Git がインストール
- 非公開 Git レポジトリを使う場合は、 SSH 公開鍵のサポート

が必要です。また、今日準備する Deploy コードは PHP を利用しているので、PHP が動くサーバーである必要があります。

2015/1 時点、日本のレンタルホスティングでは、SSH 公開・非公開鍵を使って、非公開 Git レポジトリからもやりとりできるのは VPS などのサービスしか対応していないと思います。他にできた人、ご指摘お願いします。


## Git レポジトリを作成 & .gitignore ファイルを作成

Git レポジトリを作成し、concrete5 や WordPress などの CMS サイトを使っている人は .gitignore ファイルを作りましょう。

参考までに、WordPress や concrete5 に最適化された gitignore ファイルのサンプルを置いておきます。

ここでは、

- concrete5 の files 以下のファイル郡を無視
- WordPress の wp-contens/uploads/ フォルダ以下のファイル郡を無視
- 後述の deployment.php と deployment.log を無視
- 追加アドオンやプラグインはあえて保存
- WordPress や concrete5 の本体もあえて管理
- しています。適宜編集してやってください。


**実際のコードはブログの方で掲載。**


## Deploy 用公開鍵を GitHub や Bitbucket に登録

各サーバーで、Deploy 用公開鍵を生成します。

下記ステップの詳しくは「[4.3 Git サーバー - SSH 公開鍵の作成](http://git-scm.com/book/ja/v1/Git-%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC-SSH-%E5%85%AC%E9%96%8B%E9%8D%B5%E3%81%AE%E4%BD%9C%E6%88%90)」を参照。

1. `cd ~/`
2. `mkdir .ssh` (.ssh ディレクトリが作成されていない場合、作成済みの場合は `cd ~/.ssh/`)
3. `ssh-keygen`
4. 鍵の保存先はデフォルトのまま「.ssh/id_rsa」を指定
5. パスフレーズは空のまま。そのまま「改行 (Return)」キーを2回押す
6. `cat ~/.ssh/id_rsa.pub` で表示されるキーをコピーして、GitHub や BitBucket にコピー
7. GitHub や BitBucket の該当ページに公開鍵を登録

    a. GitHub の登録場所 `https://github.com/[自分のID]/[GitHubレポジトリ]/settings/keys`
    b. BitBucket の登録場所 `https://bitbucket.org/[自分のID]/[BitBucketレポジトリ]/admin/deploy-keys`


## サーバー上で git clone 

サーバーのディレクトリで `git clone [URL]` して、GitHub か Bitnucket からレポジトリをコピーします。


## Deploy 実行用コードの設置

**実際のコードはブログの方で掲載。**

http://ja.katzueno.com/2015/01/3390/

※ 最初 Qiita を使って書いていたのですが、ちょっと大掛かりになりすぎたので、ブログに移行します。コードのメンテ画面当臭くなると気がついたので・・・。すいません。


## Deploy 実行URLを作成

長くなりすぎたのでブログに移行。


## GitHub や Bitbucket で URL の設定

長くなりすぎたのでブログに移行。

## テストして deployment.log を確認

長くなりすぎたのでブログに移行。