SVNのhookスクリプト

| Comments

SVNにcommitが行われた際に、 jenkinsのJOBを起動するスクリプト
を作成しました。
はい、あまり人に自慢出来る物ではないです・・・
( ・´ー・`)ドヤァ
svnサーバーのrubyが極めて古い場合などに有効です

hookスクリプト(本体)

(svnhook.rb) download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/env ruby
require "yaml"

repository = ARGV[0]
revision   = ARGV[1]
SETTING    = YAML.load_file(ARGV[2])

changed_output = `#{SETTING['PATH_TO_SVNLOOK']} changed #{repository} -r #{revision}`
SETTING['PATH_AND_URL_PAIR'].each{ | match, url |
  if match.instance_of?(Regexp)
    `curl #{url}` if changed_output.match( match )
  else
    `curl #{url}` if changed_output.match( Regexp.escape( match ) )
  end
}

hookスクリプト(設定ファイル)
正規表現も利用可能です

(svnhook.yaml) download
1
2
3
4
5
6
7
PATH_TO_SVNLOOK:
  /usr/local/subversion-1.6.11/bin/svnlook
PATH_AND_URL_PAIR:
  - - trunk/YourProject/app
    - http://jenkins/job/YourProject/build?delay=0sec
  - - !ruby/regexp /trunk\/YourProject\/(app|spec|lib)/
    - http://jenkins/job/YourProject/build?delay=0sec

post-commit導入例
もしこのスクリプトを利用する酔狂な人が居た場合は、post-commitへ
こーんな感じで追記してみてください

1
${SVN_ROOT}/hooks/svnhook.rb $REPOS $REV ${SVN_ROOT}/hooks/svnhook.yaml