読者です 読者をやめる 読者になる 読者になる

notebook

都内でWEB系エンジニアやってます。

git hook を使って静的サイトを自動でデプロイする

git

git hookを使って更新ファイルの内容次第でpush前にテストやデプロイを行うようにします

middlemanで作成したプロジェクトで、静的サイト用のファイルがpushされようとしているときにhookを使ってデプロイ作業も行ってしまおうというものです

実際に行うプロジェクトではrubyスクリプトもあるのでそちらはlib以下の更新ファイルが合った場合はhookでテストを実行するというような感じにしました

まぁ小規模なプロジェクトならこれで良いんじゃない?というような内容かなと思います

git hooks

Git - Git フック

.git/hoooks に実行可能なファイルを適切な名前で置くことで読み取ってくれる

クライアント側で動作するクライアントサイドフック、リポジトリ側で行うサーバサイドフックがある

今回はrubyの実行環境を前提としたコマンドを用いたいためクライアントサイドフックを用います

いくつか探してみたところ、pre-pushが今回の要件に合いそうでした

rubyスクリプトと、middlemanで作ったサイトを例にやってみます

swfz/darts

スクリプト

Gitのフックの説明と挙動の検証 を参考にどんな値が標準入力で渡されるのか確認したところ

qiita.com

pushする対象のCommitIDが入力されるようなのでそれを使って下記のように実装しました

  • .git/hooks/pre-push

最終的にできるようになったのは下記

lib以下に更新があった場合

  • テストを走らせる(rspec)
  • 失敗したらpush拒否

source以下に更新があった場合

まとめ

これでpushするだけで自動でテストやデプロイまでやってくれるようになりました

静的サイトとか小規模なプロジェクトならこれだけでも十分な気がします