気軽に svn サーバ立てて post-commit


First

ちょっと相談されたので,かんたんな環境を作ってみたのでメモ.

  • 自社内でホストする SVN サーバをさくっとたてたい・・(要望 1)
  • コミット時にいろいろゴニョゴニョしたい・・(要望 2)
  • 検証環境もさくっとたてたい・・(要望 3)

いまどき,社内ホスト SVN なんていう時点でいろいろお察しだが,まぁそうおっしゃらずに.ニーズがあること自体は否定できない.
そういうわけで,さくっとたてて post-commit とかで遊べるものを作った.本記事はその解説である.
実装は youknowcast/svn-docker-wrapper を見てほしい.

Usage

Subversion 込みの Docker イメージとして elleFlorio/svn-docker を利用させてもらっているので,そっちも解決しつつ引っ張ってくる.

$ git clone [email protected]:youknowcast/svn-docker-wrapper.git --recursive

docker-compose で起動する.
※ docker-compose 等の導入については割愛する

$ docker-compose up -d

http://localhost/svnadmin にアクセスすると iF.SVNAdmin というツールが立ち上がって GUI で最低限の設定ができるみたい.
事前にコンテナ内にはいって htpasswd で設定しない限りはユーザは admin/admin なので,この設定でログインする.

GUI 上で以下の要領でリポジトリとユーザ,それらの紐付けを行う
1. Repositories > Add で適当なリポジトリを追加(e.g. test)
2. Users > Add で適当なユーザ追加(e.g. youknow)
3. Access-Paths で 1 2 で追加したリポジトリとユーザを紐付け.権限は Read & Write にする

登録した諸情報をもとに local で svn checkout する.
※ Bulk でユーザ登録する場合はたぶん svnadmin でなんかやりようがあると思います.

$ svn co --username youknow http://localhost/svn/test

post-commit の有効化

post-commit を有効にする

$ cp -p svn/{repository}/hooks/post-commit.tmpl svn/{repository}/hooks/post-commit
# 振られているはずだが,一応権限も振っておく
$ chmod +x svn/{repository}/hooks/post-commit

いろいろ出力して遊んでみる

$ cat /home/svn/test/hooks/post-commit
()

REPOS="$1"
REV="$2"
TXN_NAME="$3"

# 引数で渡ってくる情報のチェック
echo "$REPOS $REV $TXN_NAME" >> /home/svn/test/logs
# `svnlook` でとれそうな付帯情報のチェック
svnlook info $REPOS >> /home/svn/test/logs

# もとの mailer 設定については使わない場合はコメントアウトしておきましょう.
#mailer.py commit "$REPOS" "$REV" /path/to/mailer.conf

上記の例でいくと,例えば以下のような情報がとれる.
ちょっと拡張すれば checkout -> gcc -> ./a.out くらいの簡易 CI コードは書けるでしょう.
試しにコミットしてみると以下のような感じで動作しているのが確認できる.

$ cat /home/svn/test/logs
/home/svn/test 5 4-4  # ★ $REPOS $REV $TXN_NAME
youknow               # ★ コミットユーザ
2021-02-07 17:13:41 +0000 (Sun, 07 Feb 2021) # ★ 時刻
17                    # ★ ログメッセージの文字数
youknow changed       # ★ コミットメッセージ

参考

svn-docker(very useful)
https://github.com/elleFlorio/svn-docker

svn-docker 同梱の iF.SVNADMIN の初期設定については以下が参考になった.
http://www.voycn.com/article/docker-ellefloriosvn-server-ifsvnadmin-anzhuangyushiyong

post-commit については以下を参考にした.
https://qiita.com/toshiro3/items/e69e9df146b9af5b9094