gitでhookを使ってWebサイトの自動更新

posted 2009-11-17 | written by mon_sat

以前のエントリでは、最終的に、テスト環境および本番環境で git pull することによって、それぞれを更新しています。
しかし、git には、push等が実行されると、その後に自動実行してくれるフックメカニズムが用意されています。
これを利用すれば、いちいちbareリポジトリにpush後、手動でgit pullすることなく、自動的に行なわせることができます。

下準備(テスト用と本番用でbranchを分ける)

これは必ずしも同じようにやる必要はありませんが、私の場合は、テスト環境用と本番環境用で、それぞれbranchを分けることにしています。

本番環境用を masterブランチ、テスト環境用を developブランチとします。
まずは、ブランチを作りましょう。

#localhost
# 現在のブランチを確認する
$ git branch -l
* master
$ git checkout -b develop
$ git branch -l
  master
* develop
$ git push origin develop

#server
$ cd /var/dev ;#テスト環境
$ git checkout -b develop origin/develop

開発はdevelopブランチもしくは、developブランチから分岐したブランチで行ない、テスト環境でのチェック後、developブランチをmasterブランチへmergeします。

#localhost
$ git branch -l
  master
* develop
$ edit;edit;edit;
$ git commit -a;
$ git push origin develop
#server
$ cd /var/dev ;#テスト環境
$ git pull origin develop ;#後述のフックを使用し不要になる操作
#本番サーバーでのテストが完了したら
#localhost
$ git cehckout master
$ git merge develop
$ git push origin master
#server
$ cd /var/www ;#本番環境
$ git pull origin master ;#後述のフックを使用し不要になる操作

これでふたつのブランチで運用することができました。

hookを使用する

hookは、bareリポジトリに設定します。

#server
$ cd /repos/bs.git ;#bareリポジトリ
$ cp -p hooks/post-update.sample post-update
$ vi hooks/post-update
# 追記
(cd /var/dev && git --git-dir=.git pull origin develop)
(cd /var/www && git --git-dir=.git pull origin master)

これで終了です。
実際にpullされるかを試してみましょう。

#localhost
$ git checkout develop
$ edit;edit;edit;
$ git commit -a
$ git push origin develop
# このときにテスト環境がdevelopブランチをpullしていることが確認できます。
$ git checkout master
$ git merge develop
$ git push origin master
# このときに本番環境がmasterブランチをpullしていることが確認できます。
$ git checkout develop ;#開発は常にmaster以外のブランチで行なう

めでたく自動化できました。
一度設定すると、本番サーバーでの作業が激減しますね。

プロフィール

@mon_sat

CakePHPをよく利用しています。

理解の浅かった半年前と、何も知らなかった一年前の自分への教科書として書いています。
当たり前のことも平易に。

RSS2.0

カテゴリ別エントリ一覧

タグ別エントリ一覧

アーカイブ