Hookで自動publish

このwebsiteはHugoで生成しているのですが、gitでpushしたときに自動で静的サイトを生成し、 nginxでserveするよう設定しました。そのメモ。

なお、元データはgithubにあるものを使用します。

サーバ側

まず、ベアレポジトリを作ります。

cd
mkdir git
cd git
git clone git@github.com:hajifkd/theta.tokyo.git
cd theta.tokyo
git submodule init
git submodule update
cd
mkdir repos
cd repos
git clone --bare --shared ../git/theta.tokyo/ theta.tokyo.git

次に、~/repos/theta.tokyo.git/hooks/post-receiveにhook scriptを書きます。

echo "Pushed to theta.tokyo."
cd ~/git/theta.tokyo/
echo "Sync.."
git --git-dir=.git pull ~/repos/theta.tokyo.git master
git --git-dir=.git submodule update
echo "Running Hugo..."
hugo -d ~/theta.tokyo
echo "done."

あとはnginxの設定で~/theta.tokyoを見るようにしておきます。

クライアント側

.git/configを編集します。

[remote "origin"]
  url = git@github.com:hajifkd/theta.tokyo.git
  url = URL_HERE:~/repos/theta.tokyo.git
  fetch = +refs/heads/*:refs/remotes/origin/*

URL_HEREにサーバー名を入れておきます。 あとは普通にpushするだけです。

(ただこれを編集する可能性のある全てのマシンでやる必要があります。流石にtravisとかに自分のssh keyをアップロードはしたくないので。)

Comments

comments powered by Disqus