北陸地方はまだ梅雨明け宣言が出されておらず、まだジメジメした日が続いていますね。
みなさん、こんにちは オールコネクトでWebプログラミングを担当している江端です。
うちの子どもたちは、こんなに暑い中でも元気いっぱいに遊んでいて、
家の中を綺麗にしても、すぐに散らかして困ったものです。
元気な証拠ではあるのですが…。
さて、前回はbitbucketのWebフックの設定について書きました。今回はこれを用いて
Webサーバーに自動デプロイする方法を書きたいと思います。
bashファイルを使ってgit pullする
結論から言うと、実はWebフックを使って git pullと記述されたbashファイルを実行させるだけです。
具体的に説明していきます。
- サーバーにリモートリポジトリからクローンしたソースを配置します。
- デプロイするブランチにcheckoutします。
- bitbucketのWebフックがアクセスするファイル(例 hoge.php)を作成します。
- hoge.phpに以下のコードを記述します。1234567891011<?phpif ($_SERVER["REQUEST_METHOD"] != "POST") {// GETによるアクセス} else {// POSTによるアクセスif($_GET['token_key']=='hoge_fuga'){$cmd = 'bashファイルのパス';$res = system($cmd);}}
- bashファイルに以下のコードを記述します。123#!/bin/shcd gitのリポジトリのパスgit pull
- 対象のブランチにpushしてみて、デプロイされるかどうかを確認します。
解説
hoge.phpの実際に必要な部分はsystem($cmd);だけで、その他は必須ではありません。
system関数はphpで外部のコマンドを実行する関数です。(http://php.net/manual/ja/function.system.php)
ここで、POSTによるリクエストしか受け付けず、且つGETパラメータとして?token_key=hoge_fugaがついているときしか処理しないようにしているのは、
単にアクセスしただけでは実行されないようにして少しでもセキュリティを高めています。
bashファイルでやっていることは、cdコマンドでリポジトリの場所へ移動して、git pullコマンドでソースを取得しているだけです。
これでプッシュしただけで、WebサーバーにソースがデプロイされてWebサーバーで確認することができます。
もしこの設定せずに、全て手動で行った場合、
- ブランチをプッシュする
- Webサーバーにssh等でログインする
- リポジトリがあるディレクトリに移動する
- git pullコマンドを打つ
この手順を踏むことになると思います。
たった数分で終わる作業かもしれませんが、毎回同じ作業を行うことか思うので、こういう作業は自動化した方がいいのではないでしょうか。