gitにpushしたら自動的にRijiで構築したサイトが更新されるようにする
このブログはもともと手元でriji publish
してそれをコミットしてpushしていたのだが、riji publish
はそこそこ時間がかかるのでpushしたらサーバー側でやってもらうようにした。それにともなって、自動生成されるファイルはgitの管理化から外すことにした。markdownだけ手元で管理してそれをpushしたらサイトに反映されるので大分捗る。
VPS上にgitのbare repositoryを作ってそこにpushしたら、サイトにも反映されるようにした。ついでに元々pushしていたbitbucketにもpushさせるようにした。ディレクトリ構成は以下の通り。
- bare repository
~/git/riji.git
- リリースされるディレクトリ
~/riji
まずVPS上にbare repositoryを作ります。
% mkdir -p ~/git/riji.git
% cd ~/git/riji.git
% git --bare init
次に、post-receiveを設定します。以下の様な具合。
% cat ~/git/riji.git/hooks/post-receive
#/bin/bash
set -e
set -x
export RIJI_DIR=$HOME/riji/
# $GIT_DIRを設定して、いちいち --git-dirを指定しないで済むように
export GIT_DIR=$RIJI_DIR/.git
# リリースディレクトリに移動してpublish
cd $RIJI_DIR
git pull ~/git/riji.git master
riji publish
# bitbucketにもpushしておく
git push bitbucket master
手元からVPS上にpushするのは以下の様な感じ。
% git remote add vps Songmu@songmu.jp:git/riji.git
% git push vps master
これで一応pushしたら自動でpublishしてくれるようになった。
ただ、これだと、post-receiveが走り終わるのを手元で待たないといけないので、非同期で走らせたい。
調べたら以下の記事が見つかった。at
を使って無理矢理うごかすの法。
http://d.hatena.ne.jp/anatoo/20120126/1327512373
~/git/riji.git/hooks/post-receive
の内容を以下のように変更します。hooksの内容はrepository管理しておくと良いですね。
#!/bin/sh
echo "~/riji/hooks/post-receive" | at now
以上。
もともとbitbucketのhookとか使おうかと思ってたけど、これでいいかってなった。