背景:公司的svn服务器上有很多的项目,很多时候,开发人员在提交代码的时候不填写注释或者随便填写,这不利于团队其他开发者了解code的变化,时间长了连自己也不清楚做了那些修改,出问题做代码回滚就更不知道该回滚到那个版本了,故很有必要强制按一定的规则注释。 这样做的原因:(1)规范提交备注,方便根据备注信息了解解决了那些jira中问题;(2)为随后自动生成发布报告做准备。
1、规则: 项目名+“-”+jira问题号+空格+本次提交的描述信息。
2、强制提交时按约定注释 在svn项目的hooks目录下新建pre-commit文件,内容如下: [iyunv@svn ~]# more /var/www/svn/beeer/hooks/pre-commit
#!/bin/sh
###解决中文问题
LANG=en_US.UTF-8
export LANG
REPOS="$1"
TXN="$2"
SVNLOOK=/usr/bin/svnlook
###create regex
#pkey=`mysql -usvn101 -p'test2' -h192.168.100.121 --disable-column-names jira_5 -e "select pkey from project;"`
#regex=`echo $jira_info|awk '{for(i=1;i<=NF;i++) printf "^"$i"-[1-9][0-9]{1,5}[ ]|"}'|sed 's/|$//'`
regex="^BITTER-[1-9][0-9]{1,5}[ ]|^BOUARD-[1-9][0-9]{1,5}[ ]|^HORTS-[1-9][0-9]{1,5}[ ]"
LOGMSG=`$SVNLOOK log -t "${TXN}" "$REPOS" | grep -E "^$regex" | wc -l`
if [ "$LOGMSG" -lt 1 ];
then
echo "Every commit must include project name and the Jira issue number and issue description,For example: BOUARD-1986 bugfix XXX (issue description)." 1>&2
exit 1
fi
pre-commit增加可执行权限: [iyunv@svn ~]# chmod +x /var/www/svn/beeer/hooks/pre-commit
3、svn提交后触发邮件通知 在svn项目的hooks目录下新建post-commit文件,内容如下:
[iyunv@svn ~]# more /var/www/svn/beeer/hooks/post-commit
#!/bin/sh
#source ~/.bash_profile
REPOS="$1"
REV="$2"
SENDTO="ops@laijingli.com"
# Send it to these people, calling the script we created above
/var/www/svn/scripts/svn_email_commit.sh "$REPOS" "$REV" "$SENDTO"
post-commit增加可执行权限: [iyunv@svn ~]# chmod +x /var/www/svn/beeer/hooks/post-commit
创建发送邮件的脚本: [iyunv@svn ~]# more /var/www/svn/scripts/svn_email_commit.sh
#!/bin/bash
#source ~/.bash_profile
###解决中文问题
LANG=en_US.UTF-8
export LANG
#REPOS=`echo $1|cut -d / -f 5`
REPOS=$1
REPOS_SIMPLE=`echo $1|cut -d / -f 5`
REV=$2
SENDTO=$3
SENDFROM=svncommit@wfar.com
LIMITDIFF=200
CHANGELOG=$(/usr/bin/svnlook log -r $REV $REPOS)
AUTHOR=`svnlook author -r $REV $REPOS`
CHANGED=`svnlook changed -r $REV $REPOS`
DIFF=`svnlook diff -r $REV $REPOS | head --lines=$LIMITDIFF`
DATE=`date`
#TMPFILE=/tmp/svn_"$REPOS_SIMPLE"_"$REV"_$RANDOM.message
TMPFILE=/tmp/svn_"$REPOS_SIMPLE"_"$REV"_$(date +%Y%m%d%H%M%S).message
jira_issue_id=`echo $CHANGELOG|awk '{print $1}'`
jira_info=`mysql -usvn101 -p'test' -h192.168.100.121 jira_5 -e "select pkey,REPORTER,ASSIGNEE,SUMMARY,DESCRIPTION from jiraissue where pkey='$jira_issue_id' limit
1;"`
#issue_info_sum=`echo $jira_info|awk '{print "pkey:"$6;print "REPORTER:"$7;print "ASSIGNEE:"$8;print "SUMMARY:"$9;print "DESCRIPTION:"$10}'`
issue_info_sum=`echo $jira_info|awk '{print "问题号:"$6;print "报告人:"$7;print "经办人:"$8;print "问题摘要:"$9;print "问题描述:"$10}'`
#echo "$CHANGELOG">/tmp/echos.log
SUBJECT="SVNCommit ($AUTHOR) $REPOS_SIMPLE [$REV]"
echo "-------------------- SVN Commit Notification --------------------
Repository: $REPOS
Revision: $REV
Author: $AUTHOR
Date: $DATE
jira_issue_summary:
issue_url :http://192.168.100.121:8085/browse/$jira_issue_id
$issue_info_sum
-----------------------------------------------------------------
Log Message:
-----------------------------------------------------------------
$CHANGELOG
-----------------------------------------------------------------
Changes:
-----------------------------------------------------------------
$CHANGED
-----------------------------------------------------------------
Diff: (only first $LIMITDIFF lines shown)
-----------------------------------------------------------------
$DIFF
" > $TMPFILE
# Send email
#cat $TMPFILE | mail -a "From: $SENDFROM" -s "$SUBJECT" "$SENDTO"
#cat $TMPFILE | mail -s "$SUBJECT" "$SENDTO"
#cat $TMPFILE | mutt -s "$SUBJECT" "$SENDTO"
cat $TMPFILE |iconv -f utf8 -t gbk | mail -s "$SUBJECT" "$SENDTO" -- -f lai@wby.com
#echo `/usr/bin/svnlook log -r $REV $REPOS` |iconv -f utf8 -t gbk| mail -s "$SUBJECT" "$SENDTO"
#echo `/usr/bin/svnlook log -r $REV $REPOS` >/tmp/log.txt
# Cleanup
#rm $TMPFILE
svn_email_commit.sh增加可执行权限: [iyunv@svn ~]# chmod +x /var/www/svn/scripts/svn_email_commit.sh
至此已经完成本文的2个功能:强制注释、提交触发邮件通知。 效果截图:
|