svn提交时,邮件通知问题解决的经验谈

svn可以实现在commit提交时,使用hook钩子功能,向指定的邮箱发送提交注释comment/log及内容变化的邮件,以方便对之进行监控。
具体的描述就是,
1.当某个账号提交代码/文档时,使用钩子功能,调用仓库的hooks目录下的post-commit文件,实际上是执行一个shell文件,因此要求此文件具有执行权限
2.在shell文件中,通过显式的编码方式运行mailer.py,根据mailer.conf文件中配置的邮件服务器,from address,to address,reply to等,向指定的邮箱发送带svn提交时各种信息的邮件。
3.如果采用这种方式配置邮件通知功能,根据上面的描述,你的操作系统中需要有python运行环境,一般来说,版本应该不小于2.4.x
4.以上具体配置可参考官方wiki,链接如下:
https://ctf.open.collab.net/sf/wiki/do/viewPage/projects.svnedge/wiki/CommitMailerOnLinux

我按照官网给出的办法在一台linux测试机上配置之后,很快就可以收到邮件了,一切运行正常,然而,配置到公司内网的svn服务器上后,运行的时候不出任何错误提示,但就是收不到邮件。按道理说,linux系统下,执行shell命令没有任何错误提示,说明此命令运行是正确的。但收不到邮件,这是怎么回事?
于是开始比较两个操作系统的版本等信息,python的版本等等,发现是不完全一样。测试机使用centos 6.4, python 2.6.6版本,而svn服务器则是Redhat kiTangka 5.8,python 2.4.3.难道是因为这些原因?
至此有些一筹莫展,甚至一度想如果实在没有办法,只能是做数据迁移了。

就在这时,请教了一下公司的运维同事,事情开始峰回路转。运维首先是在svn服务器上ping了一下smtp邮件服务器地址,发现ping不通,而测试机则可以。
那么需要在svn服务器上配置dns解析,配置之后马上可以ping通邮件服务器了,但还是无法收到邮件。
运维同事这时又不慌不忙的开始查看svn服务器的sendmail服务是否正确,果然,这台机器的mail服务没有启动,不能发送/接收任何邮件,于是启动mail服务,然后。。。之前未发出去的邮件,已经像雪片般开始不断的延迟发送了。
至此全部配置成功!

这次问题的最终解决,给自己带来最大的经验教训就是,在linux系统中,其实在任何系统中都是这样,如果要用到网络环境以及某种服务时,比如发送邮件,提供web http服务等,一个非常重要的前提就是,在系统中基础网络,dns,ip配置,邮件服务甚至iptables防火墙等这些准备工作已经就绪,再去进行上层的开发或者配置,不要一味怀疑自己的程序或者上层执行有问题。当纠结于那台服务器可以正确执行,为啥这台就不行呢的时候,要充分考虑二者运行环境的差异,否则问题得不到很好的解决。
最后,也得对常用操作系统有深入的理解,譬如最初俺根本不知道,linux系统下发送邮件,需要启动mail服务才行。

时间: 2024-10-07 23:17:23

svn提交时,邮件通知问题解决的经验谈的相关文章

svn提交时提示 Aborting commit: remains in conflict 解决办法,更改svn服务地址

问题: 我们的服务器换了新的URL地址,这时候我们本地的SVN访问帐号和地址就要重新定义了. 解决步骤: 1:重新定义SVN的URL,右键(TortoiseSVN) → Relocate → 输入你新的IP地址 问题解决! svn提交时提示 Aborting commit: remains in conflict 解决办法 问题: 我们的服务器换了新的URL地址,这时候我们本地的SVN访问帐号和地址就要重新定义了. 解决步骤: 1:重新定义SVN的URL,右键(TortoiseSVN) → Re

svn提交时强制添加注释 (转)

SVN提交时,如果没有注释,在查阅历史时,会非常不方便.因此我们需要有一个让程序员提交代码时,强制添加注释的规则.下面看看在SVN中怎么实现. 1. 推荐使用VisualSVN作为服务端(免费下载地址:http://www.visualsvn.com/).安装完毕后,打开VisualSVN Server管理器,在版本库上点击"属性",选择"Hooks"选项,选中"Pre-commit hook"后,点击"Edit".(如下图)

svn提交时强制添加注释

负责前端开发的同事提出需求,svn提交时必须添加注释,否则有可能不知道代码是谁提交的. 搭建svn服务器时,用的是CollabNetSubversionEdge.添加用户,管理工程权限都挺方便.让某个工程在提交时添加注释,需要在svn的hooks目录下,新建一个pre-commit的文件并给它可执行权限. 代码如下: #!/bin/bash REPOS="$1" TXN="$2" SVNLOOK=/local/csvn/bin/svnlook LOGMSG=$($S

svn 提交时出现

svn提交时出现: /usr/bin/svnlook: error while loading shared libraries: libaprutil-1.so.0 这两天在svn服务器重新安装apache了,然后提交的时候就出现了如上错误,经过一顿剖析 出现这个错误的原因就是svnserver在编译时是加了apache支持的,现在无法找到apr-util库,一般情况下我们将apr-util的lib目录加入到系统的lib路径中就可以了,比如我服务器的apache的apr和apr-util的安装

svn提交时强制注释

svn提交时强制注释 不少开发员提交修改的时候都不写注释,导致查看历史时很费劲,也不太符合规范.有的公司要求每次提交修改时都写上bug号或者任务描述,那么如何在工具上防止开发员们不写注释呢?  利用svn的pre-commit钩子可简单实现此要求.进入仓库project1/hooks目录,找到pre-commit.tmpl文件,重命名,去掉后缀.tmpl. 编辑pre-commit文件:(Linux系统和windows系统脚本内容见1和2)1.Linux系统 方法1: 将: $SVNLOOK l

Linux停SVN提交时强制写日志

Linux下SVN提交时强制写日志 SVN默认可以不写注释提交,有时候可能忘记写注释,有的人也没有写注释的习惯,导致翻看history的时候都不知道做了哪些更改,可以依照以下步骤修改SVN配置,强制提交SVN前写注释 步骤: 1.进入svn/code/hooks目录,在svn版本库的hooks文件夹下面,复制模版pre-commit.tmplcp pre-commit.tmpl pre-commitchmod +x pre-commit 2.编辑pre-commit文件:将:$SVNLOOK l

ubutnu 下SVN 提交时忽略某些文件或文件夹

当编译程序时会出现很多中间文件,但是提交时又不希望提交这些文件,如下图,那么问题来了,该怎么忽略这些文件呢? 1.首先把产生的中间文件名保存到一个文件里面,如:ignore.txt,就是那些前面带?号的,当然也包括ignore.txt本身.别忘了?号后面有7个空格(根据?号到文件名之间的空格数决定). 虽然很笨,But,It works! 目的是让产生的ignore.txt文件中忽略文件名前没有任何空格. svn status |awk -F '\?       ' '{printf $2"\n

SVN提交时强制填写备注

很多程序员不爱写注释,特别是svn提交的时候,文件做了什么修改都没有一个简单的备注,往往都是直接提交,这样是非常不利于团队开发的.所以就有了svn提交的时候,强制修改文件的备注. 步骤如下: 1.先找到对应项目的svn版本库hooks sudo find / -name hooks 2.假设进入test_wx项目下面的svn版本库 复制一份pre-commit.tmpl文件 cp pre-commit.tmpl  pre-commit 修改pre-commit的权限 chmod +x pre-c

如何设置SVN提交时强制添加注释

windows版本: 1.新建一个名为pre-commit.bat的文件并将该文件放在创建的库文件的hooks文件夹中 2.pre-commit.bat文件的内容如下: @echo off set SVN_BINDIR="C:\ProgramFiles\Subversion" set SVNLOOK="E:\freescm\freescm\SVN\bin\svnlook.exe" setlocal set REPOS=%1 set TXN=%2 rem check