Skip to content

SVN에 메일 알람설정하기

저는 현재 회사에서 SVN 이라는 버전관리툴을 사용 하고 있습니다. 사실 혼자 진행하는 프로젝트도 꼭 이 SVN을 사용해서 저장소를 만들어 둡니다. 그러면 언제 어디서든지 작업을 수행 할 수있어서 매우 편리합니다. 대표적인 무료SVN 저장소는 구글코드와 네이버 개발자센터가 있습니다. 제 경우는 네이버쪽이 파일전송 속도가 조금 더 빨라서 네이버를 이용합니다. 해외 개발자와의 협업을 생각한다면 구글코드도 좋습니다. 여담으로 예전에 Java로 만든 amfserver 가 구글코드에서 썩어가고 있군요. ㅎㅎㅎ

네이버 개발자센터를 사용해보신 분이라면 SVN 상태 변화를 메일로 받아 보셨을 겁니다. 보통 SVN 은 여러명이서 사용하므로 이렇게 메일로 알람이 오면 상당히 편리합니다. 저도 그래서 저희 회사 SVN 서버에 이 기능을 넣어서 사용 했었습니다. 최근 서버 마이그레이션 작업을 하면서 이 기능을 귀잖아 빼버렸는데 왜 귀잖은지 그리고 나중에 필요 할 수도 있는 내용이라 기억차원에서 글을 작성합니다.

과거 시스템

과거 시스템은 개인적으로 터미널에서 작업하는게 훨씬 익숙해 Cygwin 에 세팅 하였습니다. 위 그림처럼의 세팅은 Cygwin 에 패키지 설정만 해주면 거의 한번에 설치 할 수 있습니다. 대략 프로세스를 설명하자면 SVN 에서 Commit 이 발생하면 hooks 에 있는 post-commit 스크립트가 메일을 보냅니다. 참~ 쉬죠잉? ㅎㅎㅎ

현재 시스템

이게 현재 시스템입니다. 메일서버만 빼고 전부 윈도우로 이전하였습니다. 이유는 단 하나 저의 엄청난 귀차니즘 때문에~~~ㅎㅎㅎ SVN은 단순 파일버전관리툴입니다. 여기에 프로젝트 관리를 위한 Trac 을 사용하고 싶어졌습니다. 그런데 조금만 구글링 해보시면 알겠지만 이 Trac 설정이 생각보다 까다롭습니다. 그걸 한방에 해결해주는 TOW 란걸 사용하기 위해 모두 윈도우로 이전하였습니다. APM도 xampp 가 더 편해요~~

TOW 를 설치하면 Trac 과 SVN 이 모두 연동되어 있어서 아주 편합니다. 이렇게 세팅을 하고 나니 위의 그림같은 구조가 되어 버렸습니다. 윈도우가 XP 였던 관계로 당연히 메일서버는 없습니다. 결국 윈도우에서 돌아가는 SVN 에서 Cygwin 에서 돌아가는 메일서버로 메일을 발송해야 되는 구조가 된 것이죠. 그래서 이걸 다시 세팅하기 귀잖은 겁니다~ 음하하하 이 놈의 귀차니즘… 그리고 사실 저는 하루에도 수십번씩 커밋을 날리기 때문에 메일이 너무 많이 온다는 단점도 있습니다. (커밋을 이렇게 많이 하시면 안되요~~~ㅎㅎ)

어쨌든 이런사정으로 아래 코드들은 새로운 서버에 반영 하지 않았습니다.

우선 hooks 에 post-commit.cmd 파일을 아래와 같이 만듭니다. 원래는 post-commit.tmpl 을 post-commit 으로 변경하면 실행이 되는 구조인데 윈도우기반으로 돌아가야 하므로 *.cmd 로 합니다. 그러므로 당연히 원래와 같은 bash 파일은 아닙니다. 여기서 살짝 기억이 가물가물한게 다른 설정을 안바꿔줘도 자동으로 post-commit.cmd 을 호출하는지가 기억이 나질 않습니다 ㅠㅠ 아마 맞을거에요;;;;;

post-commit.cmd

@echo off

C:
chdir C:cygwinbin

bash --login -i commit-email.sh %1 %2

그러면 위의 post-commit.cmd 파일이 commit-email.sh 을 호출해서 메일을 발송하는 구조입니다. 보통 .tmpl 에는 commit-email.pl 같은 perl 파일을 호출하는데 왜 따로 commit-email.sh 을 만들었는지도…….기억이 나지 않습니다. 아마 뭔가 이유가 있었을 거 같은데 워낙 오래전 일이라;;;;

commit-email.sh

#!/bin/bash

REPOS="$1"
REV="$2"
NAME=`basename $REPOS`
ADDR="http://SVN 저장소 주소/$NAME"
USER="받을 이메일 주소"
cp /bin/mail.eml /bin/temp.eml

echo "[Address]" >> /bin/temp.eml
echo "$ADDR" >> /bin/temp.eml
echo " " >> /bin/temp.eml
echo " " >> /bin/temp.eml
echo "[Location]" >> /bin/temp.eml
/bin/svnlook dirs-changed "$REPOS" -r "$REV" >> /bin/temp.eml
echo " " >> /bin/temp.eml
echo " " >> /bin/temp.eml
echo "[Files]" >> /bin/temp.eml
/bin/svnlook changed "$REPOS" -r "$REV" >> /bin/temp.eml
echo " " >> /bin/temp.eml
#echo "[트리]" >> /bin/temp.eml
#/bin/svnlook tree "$REPOS" -r "$REV" >> /bin/temp.eml
echo " " >> /bin/temp.eml
echo "This mail is only sending. Don't reply." >> /bin/temp.eml
echo " " >> /bin/temp.eml


email -s "[SVN] $NAME was commited." "$USER" < /bin/temp.eml
rm -f /bin/temp.eml

$1, $2 인자로 넘어오는 건 보시는 것 처럼 저장소와 리비전입니다. 요걸 이용해서 필요한 정보를 임시 eml 파일에 써주고 emil 로 쏴주면 끝입니다. 제 경우 트리는 너무 양이 많아서 빼버렸습니다. 사실 이런 시스템은 누군가 저장소에 커밋을 행했다는 것만 알면 되니까 많은 정보는 필요없을 것 같습니다. 실제 정보는 SVN 클라이언트에서 확인하면 되니까요.

이렇게 하시면 윈도우 기반 SVN 에서 Cygwin 을 통해 메일을 보낼 수 있게 됩니다. 물론 윈도우서버가 익숙하신 분이라면 윈도우로 메일을 보낼 수도 있을 겁니다. 흠… 누가 윈도우로 메일 보내는 법을 알려주시면 좋겠네요~ ^^

1 thought on “SVN에 메일 알람설정하기”

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.