svnへのコミット時に、以前作ったメール送信の他にHudson側に処理をさせたい気持ちが出てきたのですが、hooks配下のファイルがsvnで管理できないと何かと不便です。せっかくsvnを使っているんだから、svnで使うファイルくらいsvnに管理させたいという思いから、hook処理時にsvn updateで取得したスクリプトに処理を委譲?させることにしました。
ちなみに、少しあやしいです。
svnのリポジトリ上にスクリプトを作る
hook_scripts/ |-- post-commit `-- post-commit.rb
まずsvn上にhook_scriptsという名前で、スクリプト置き場を作ります。
試しに以前のエントリで作ったpost-commitを使用してみます。
Subversionでコミット時にメールを送信する - tanamonの日記
hooksの下でチェックアウトする
# cd /opt/svn/test/hooks # svn co file:///opt/svn/test/trunk/hook_scripts A hook_scripts/post-commit A hook_scripts/post-commit.rb リビジョン 7 をチェックアウトしました。
hooksの下で、先ほど作成したスクリプト一式をチェックアウトします。
hookし直すスクリプトを作る
# vi hook_proxy.sh
#!/bin/sh REPOS="$1" REV="$2" cd $REPOS/hooks/hook_scripts svn update chmod +x * ./`basename $0` $REPOS $REV
# chmod +x hook_proxy.sh # ln -s hook_proxy.sh post-commit
やっていることとしては、hookされたスクリプト名と同名のhook_scripts以下のファイルを呼び直しています。
hook_scriptsの変更が反映されるようにsvn updateしていますが、別途cron等で動かしたほうがスマートっぽいです。
(でも面倒なのでやらない)
手動で動作確認する
# sudo -u apache -H ./post-commit /opt/svn/test 7 リビジョン 7 です。
メールが飛んでくればOKです。
後は、hook_scriptsの下のファイルをsvnにコミットすれば、以降のhook処理が変わるようになります。