さまりーごーるど
タイトルが全てである。
手元の環境では、Rhodecodeのhookが動くことを確認できているのはMercurialを使った場合だけなので、gitではなくhgを使います。
Rhodecodeのインストールは Rhodecodeインストールほか を参照
hookスクリプトの確認
rhodecodeでリポジトリを作った場合、特に何もしなければ repos/repository-name が作られるはずである。
リポジトリ種別はhgを選んでくださいね。
その後は、基本的に普段のMercurialと動作は同じなので、hgrcファイルに [hook]
を書けばhookからスクリプト実行が可能になる。
試しに、どのタイミングで何が発行されるかを確認しておこう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
$ vi repos/test-repository/.hg/hgrc
[hooks]
changegroup.date = echo `date && echo 'changegroup'` >> /var/tmp/date.txt
commit.date = echo `date && echo 'commit'` >> /var/tmp/date.txt
incoming.date = echo `date && echo 'incoming'` >> /var/tmp/date.txt
outcoming.date = echo `date && echo 'outcoming'` >> /var/tmp/date.txt
prechangegroup.date = echo `date && echo 'prechangegroup'` >> /var/tmp/date.txt
precommit.date = echo `date && echo 'precommit'` >> /var/tmp/date.txt
preoutgoing.date = echo `date && echo 'preoutgoing'` >> /var/tmp/date.txt
pretag.date = echo `date && echo 'pretag'` >> /var/tmp/date.txt
pretxnchangegroup.date = echo `date && echo 'pretxnchangegroup'` >> /var/tmp/date.txt
pretxncommit.date = echo `date && echo 'pretxncommit'` >> /var/tmp/date.txt
preupdate.date = echo `date && echo 'preupdate'` >> /var/tmp/date.txt
tag.date = echo `date && echo 'tag'` >> /var/tmp/date.txt
update.date = echo `date && echo 'update'` >> /var/tmp/date.txt
|
この時の出力は、それぞれこうなる。
Web上からcommitした時
1
|
Tue Feb 11 19:52:50 JST 2014 pretxncommit
|
Pull時
1
|
Tue Feb 11 19:59:37 JST 2014 preoutgoing
|
Push時
1
2
3
4
|
Tue Feb 11 20:00:25 JST 2014 prechangegroup
Tue Feb 11 20:00:25 JST 2014 pretxnchangegroup
Tue Feb 11 20:00:25 JST 2014 changegroup
Tue Feb 11 20:00:25 JST 2014 incoming
|
hookにPelicanをmake htmlするスクリプトを書く
今回は以下の順に進めます。
- 記事がpushされる、またはWeb上から編集後にCommitされる
- changegroupまたはpretxncommitからhookスクリプトが起動する
- fabricを使ってpelicanサーバにログイン
- hg clone
- make html
- 公開ディレクトリにrsync
- 完了
サラッと出てきたけどFabricを使ってデプロイをする。そう、ズルである。
rhodecodeサーバでmake htmlしてアップロードした方が良いと感じた皆様は、僕のことを虫けらを見るような目で見てほしい。
まずは、hookの設定をする。
1
2
3
4
|
$ vi ~/rhodecode/repos/pelican-repository/.hg/hgrc
[hooks]
pretxncommit.pelican_deploy = /usr/local/bin/fab -f /home/rhodecode/pelican_deploy/fabfile.py -u pelican update
changegroup.pelican_deploy = /usr/local/bin/fab -f /home/rhodecode/pelican_deploy/fabfile.py -u pelican update
|
Tip
fabコマンドは極力フルパスを書いておきましょう。
次にfabfile.pyを書く。ここではnginxを使っている場合で書いてみる。
/home/rhodecode/pelican_deploy/fabfile.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# -*- coding: utf-8 -*-
from fabric.api import run, cd, hosts, prefix, put
pelican = "192.168.0.17"
repo = "http://pelican:pelican@192.168.0.18:5000/repo/pelican-repository"
@hosts(pelican)
def update():
run("hg clone {}".format(repo))
with cd("pelican-repository"):
with prefix('source /home/pelican/pelican/bin/activate'):
run("make html")
run("rsync -a --delete output/ /usr/share/nginx/www/pelican/")
run("rm -rf pelican-repository")
|
fabricのsshパスワードをファイルに書いておきたい場合は、更に
1
2
|
from fabric.api import env
env.password = "password"
|
を書けばいいし、ファイルにパスワードを書いておきたくないのであれば、
1
|
$ ssh-copy-id 192.168.0.17
|
のようにして登録しておけばいいだろう。
あとは、手元で書いたファイルをリポジトリにアップロードすればいいだけになる。
とても楽でよい。