おそらくはそれさえも平凡な日々

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とか使おうかと思ってたけど、これでいいかってなった。

created at
last modified at
comments powered by Disqus