CentOS 6.8使用Subversion + Usvn 搭建版本管理服務器+常用鈎子


snailshadow 標簽: subversionusvn

一. Subversion 簡介


Subversion是一個自由,開源的版本控制系統。Subversion將文件存放在中心版本庫里。這個版本庫很像一個普通的文件服務器,不同的是,它可以記錄每一次文件和目錄的修改情況。這樣就可以籍此將數據恢復到以前的版本,並可以查看數據的更改細節。

二. 環境准備CentOS 6.8

1,操作系統內核版本

[root@localhost ~]# uname -r
2.6.32-642.el6.x86_64

2,關閉selinux

[root@localhost ~]# vim /etc/selinux/config

SELINUX=disabled

3,關閉防火牆

[root@localhost ~]#service iptables stop

[root@localhost ~]#chkconfig iptables off

4,配置yum源(這里使用163yum源和epelyum源)

[root@localhost ~]#wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS6-Base-163.repo

[root@localhost ~]#rpm -ivh http://mirrors.yun-idc.com/epel//6/x86_64/epel-release-6-8.noarch.rpm

修改配置文件

#vim /etc/yum.repos.d/CentOS-Base.repo

:%s/$releasever/6/g

yum clean all

yum makecache

搞定!!!

 

三、安裝

1. 安裝所需軟件

[root@localhost ~]#yum install subversion httpd mod_dav_svn php php-mysql mysql-server perl-DBI perl-DBD-mysql mysql-devel mod_auth_mysql 

2,查看 subversion 是否安裝成功

[root@localhost ~]#svnserve --version
svnserve,版本 1.6.11 (r934486)

------略

3,啟動httpd、mysqld服務

[root@localhost ~]#service httpd start

[root@localhost ~]#service mysqld start

[root@localhost ~]#chkconfig httpd on

[root@localhost ~]#chkconfig mysqld on

[root@localhost ~]# chkconfig svnserve on

 

4,設置mysqld密碼和訪問權限

[root@localhost ~]#mysqladmin -u root password 123456

[root@localhost ~]#mysql -uroot –pcoship

mysql> grant all on *.* to 'root'@'%' identified by 123456 WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

四.配置Usvn

1,從GitHub下載Usvn

[root@localhost ~]#wget https://github.com/usvn/usvn/archive/1.0.7.tar.gz

2,安裝配置Usvn

[root@localhost ~]#tar -zxvf 1.0.7.tar.gz

[root@localhost ~]#mv usvn-1.0.7/ /var/www/html

[root@localhost ~]#chown -R apache:apache /var/www/html/usvn

3,配置Apache目錄允許重寫(默認已經配好)

vim /etc/httpd/conf/httpd.conf 

文件最后加入

<Directory "/var/www/html/">

        AllowOverride all                                 ---此項需要修改,否則后面會報錯

        Order allow,deny

        Allow from all

</Directory>

4,重啟apache服務

[root@localhost ~]#service httpd restart

5,瀏覽器輸入http://ip/usvn/public/install.php 開始安裝

image

一直點擊下一步,如果出現這個報錯,就說明httpd.conf配置文件中,根目錄的AllowOverride沒有配置為yes

image

選擇時區和語言:

image

設置svn根目錄,我這里使用默認配置

創建版本庫路徑

[root@localhost ~]#mdkir /home/subversion/

創建密碼文件和權限文件路徑

[root@localhost ~]#mdkir /home/subversion/passwd

給目錄授權

chown apache:apache –R /home/subversion/

image

配置數據庫

image

創建管理員,其中密碼必須8位以上(admin/1qaz2wsx)

image

最后一步將生成的配置,添加到httpd.conf文件結尾

image

重啟httpd服務

[root@localhost ~]#service httpd restart

 

創建項目,用戶組,用戶(略)

客戶端連接項目:http://10.80.0.161/usvn/public/svn/docs/       docs為項目名稱

 

五.常見問題

1、安裝到最后遇到一個頭痛的問題,當目錄出現中文時無法設置目錄權限

解決方法:

  • 設置系統編碼:vim /etc/sysconfig/i18n  改成如下

       LANG="zh_CN.UTF-8"

        SYSFONT="latarcyrheb-sun16"

  • 修改USVN語言環境:vim /var/www/html/usvn/app/bootstrap.php

       在文件最前面加上

       setlocale(LC_ALL, 'zh_CN.UTF-8');

2、提交message不能為空

vim ${svn_dir}/hooks/pre-commit

#!/bin/sh
REPOS="$1"
TXN="$2"

# Make sure that the log message contains some text.
SVNLOOK=/usr/bin/svnlook
$SVNLOOK log -t "$TXN" "$REPOS" | \
   grep "[a-zA-Z0-9]" > /dev/null
#|| exit 1

#commit-access-control.pl "$REPOS" "$TXN" commit-access-control.cfg || exit 1
LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c`
if [ "$LOGMSG" -lt 10 ];
then
    echo -e "svn log cann't less than 10 character" 1>&2
    exit 1
fi
# All checks passed, so allow the commit.
exit 0
chown apache:apache  pre-commit
chmod +x pre-commit

3、使用sendmail服務實現提交后,發送郵件通知管理員

  • 安裝sendmail和sendmail-cf
#yum install sendmail
#yum install -y sendmail-cf
  • 修改/etc/mail/sendmail.mc
DAEMON_OPTIONS(`Port=smtp,Addr=192.0.1.2, Name=MTA')dnl  #IP地址配置為本機IP地址
  • 修改/etc/mail.rc 在文件最后增加內容
set from=xxx@163.com smtp=smtp.163.com smtp-auth-user=xxx smtp-auth-password="163郵箱的客戶端授權碼" smtp-auth=login

注:使用163郵件發送郵件,密碼要填寫客戶端授權碼,否則會報錯“535 Error:authentication failed”,關於如何生成客戶端授權碼,請參考下面這個網址:

https://jingyan.baidu.com/article/495ba841ecc72c38b30ede38.html

  • 增加svn_email_commit.sh發送郵件腳本,內容如下:
#cd /home/subversion/svn/docs/hooks/
#vim svn_sendemail_commit.sh
#!/bin/bash
REPOS=$1
REV=$2
SENDTO=$3
SENDFROM=xxx@163.com
 
LIMITDIFF=200
CHANGELOG=`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$REV-$RANDOM.message
 
SUBJECT="SVNCommit ($AUTHOR) $REPOS [$REV]"
echo "-------------------- SVN Commit Notification --------------------
Repository: $REPOS
Revision:   $REV
Author:     $AUTHOR
Date:       $DATE
     
-----------------------------------------------------------------
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 -a "$TMPFILE" -s "$SUBJECT" "$SENDTO"
 
# Cleanup
rm $TMPFILE
  • 修改post-commit腳本
#!/bin/sh
export LC_CTYPE=zh_CN.UTF-8

export PATH=$PATH:/usr/local/svn/bin:/home/subversion/svn/docs/hooks/:
REPOS="$1"
REV="$2"

SENDTO="aaa@163.com,bbb@qq.com"
# Send it to these people, calling the script we created above
/home/subversion/svn/docs/hooks/svn_sendemail_commit.sh "$REPOS" "$REV" "$SENDTO"
  • 自動sendmail服務
#service sendmail restart
#chkconfig sendmail on

注意,如果sendmail服務啟動很慢,很可能是因為解析本機的域名慢,需要修改/etc/hosts文件。添加: 192.0.1.2  svnhost. svnhost(主機名后面一定要加“."啊)

  • 測試發送郵件
#cat /etc/passwd |mail -s "test mail" xxx@163.com


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM