Ads 468x60px

##EasyReadMore##

10 11月, 2015

Ubuntu 下設定 SVN 自動發送信件變動通知

Subversion 的 post-commit hook 是個很方便的功能,可以讓你在 commit 程式到 Repository 後,自動去做一些事。其中最有用的就是把 commit log 寄給相關的 developer , 順便將 commit 版本與前一個版本自動做 diff 的動作.

安裝 subversion-tools

請用 sudo apt-get install subversion-tools 將相關的 Subversion 工具裝到你的系統中。

sudo apt-get install subversion-tools

用 dpkg -L subversion-tools 找安裝位置在哪

修改 commit-email.pl


    #為註釋  +為要加入的行
  #my ($sendmail, $smtp_server);
  +my ($sendmail, $smtp_server,$uname,$upasswd);
  +$smtp_server = "msa.hinet.net";
  +$uname="svn\@xxxx.com";
  +$upasswd="*********";
 
  #/usr/bin/sendmail
 
  ...............................................
  ...............................................
      elsif (defined $smtp_server and @email_addresses)
      {
        my $smtp = Net::SMTP->new($smtp_server);
+#qvb
+       handle_smtp_error($smtp, $smtp->auth($uname,$upasswd));
+#qvb add       
        handle_smtp_error($smtp, $smtp->mail($mail_from));
        handle_smtp_error($smtp, $smtp->recipient(@email_addresses));
        handle_smtp_error($smtp, $smtp->data());
        handle_smtp_error($smtp, $smtp->datasend(@head, @body));


準備 post-commit

cd /svn/SMP8756/hooks
sudo cp post-commit.tmpl post-commit
sudo chmod u+x post-commit

修改 post-commit

vim /svn/SMP8756/hook/post-commit

REPOS="$1"
REV="$2"
export LC_CTYPE="zh_TW.UTF-8"
#"$REPOS"/hooks/mailer.py commit "$REPOS" $REV "$REPOS"/mailer.conf
#/usr/share/subversion/hook-scripts/mailer/mailer.py commit "$REPOS" "$REV" /svn/SMP8756/mailer.conf
/usr/share/subversion/hook-scripts/commit-email.pl "$REPOS" "$REV" Caven_Liao@infofab.com -s "SVN Change:" --from svn@infofab.com

if [ $? -ne 0 ]; then
    echo "failure to commit-email.pl commit $REPOS $REV" >> /svn/SMP8756/mail.log
fi

ps:若要寄送給多人  多加幾行指令即可 /usr/share/subversion/hook-scripts/commit-email.pl "$REPOS" "$REV" xxx@xxx.com -s "SVN Change:" --from svn@infofab.com

程式解說:

這裡不使用 mailer.py 所以將它註解
mail.log: 失敗會把訊息存在 mail.log
-s: 信件抬頭
--from 寄件人
"$REV" 版號
"$REPOS" diff 內容
export LC_CTYPE="zh_TW.UTF-8" 解決中文亂碼

測試:

直接執行
/usr/share/subversion/hook-scripts/commit-email.pl "$REPOS" "$REV" xxxx@infofab.com -s "SVN Change:" --from svn@infofab.com

看看是否有寄信成功 不要傻傻的直接在 svn 直接上傳 code



問題解決:

問題:

/usr/share/subversion/hook-scripts/commit-email.pl: exactly one of $sendmail or $smtp_server must be set, edit /usr/share/subversion/hook-scripts/commit-email.pl

解決:

$sendmail or $smtp_server 只能擇一
所以 define 了 smtp_server ,sendmail 就要 disable 掉
修改 vim /usr/share/subversion/hook-scripts/commit-email.pl
#$sendmail = "/usr/sbin/sendmail";

問題:

/usr/share/subversion/hook-scripts/commit-email.pl: SMTP Error: Need MIME::Base64 and Authen::SASL todo auth

解決:

apt-get install libauthen-sasl-perl

/usr/share/subversion/hook-scripts/commit-email.pl: SMTP Error: Command unknown: 'AUTH'

問題:

smtp-server not supporting authentication.
如果是中華電信 是不用使用者認證的
vim /usr/share/subversion/hook-scripts/commit-email.pl

解決:

刪掉這行 handle_smtp_error($smtp, $smtp->auth($uname,$upasswd));

 

參考文件:

在 svn 的 post-commit hook 中使用 Gmail SMTP | Mark's Place
http://goo.gl/vp4mWH

svn 提交时 邮件通知的配置 - - ITeye技术网站
http://goo.gl/n3FAYW

svn hooks 自动发邮件 - 天迥居士 - ITeye技术网站
http://goo.gl/2UCT58

Subversion commit log 自動寄信通知 - Tsung's Blog
http://goo.gl/V4mdgG

Email Notification of SVN Commits | Steven Gordon
https://goo.gl/OPq04V

Ubuntu下配置SVN自动发送邮件通知 - yihui8的专栏 - 博客频道 - CSDN.NET
http://goo.gl/UVyRu7

0 意見:

張貼留言

 
Blogger Templates