First
ちょっと相談されたので,かんたんな環境を作ってみたのでメモ.
- 自社内でホストする SVN サーバをさくっとたてたい・・(要望 1)
- コミット時にいろいろゴニョゴニョしたい・・(要望 2)
- 検証環境もさくっとたてたい・・(要望 3)
いまどき,社内ホスト SVN なんていう時点でいろいろお察しだが,まぁそうおっしゃらずに.ニーズがあること自体は否定できない.
そういうわけで,さくっとたてて post-commit とかで遊べるものを作った.本記事はその解説である.
実装は youknowcast/svn-docker-wrapper を見てほしい.
Usage
Subversion 込みの Docker イメージとして elleFlorio/svn-docker を利用させてもらっているので,そっちも解決しつつ引っ張ってくる.
$ git clone git@github.com:youknowcast/svn-docker-wrapper.git --recursive
docker-compose で起動する.
※ docker-compose 等の導入については割愛する
$ docker-compose up -d
http://localhost/svnadmin
にアクセスすると iF.SVNAdmin というツールが立ち上がって GUI で最低限の設定ができるみたい.
事前にコンテナ内にはいって htpasswd
で設定しない限りはユーザは admin/admin
なので,この設定でログインする.
GUI 上で以下の要領でリポジトリとユーザ,それらの紐付けを行う
- Repositories > Add で適当なリポジトリを追加(e.g. test)
- Users > Add で適当なユーザ追加(e.g. youknow)
- 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