1. 程式人生 > >3----svn版本控制部署+分發機

3----svn版本控制部署+分發機

svn 版本 控制部署

技術分享

上圖為web代碼上線流程:
1,研發人員上傳代碼至內網svn
2,運維人員從內網svn拉取代碼上傳至外網svn
3,代碼更改觸發鉤子腳本傳至分發機
4,分發機部署rsync服務端
5,web1和web2可以使用計劃任務去rsync服務端拉取代碼


部署說明:
1,本文只部署外網svn+分發機rsync+web拉取
2,采用 svn+apache

192.168.9.168 Centos6.5apache+svn+分發機rsync
192.168.9.176 Centos6.5web1
前期準備:
機器初始化,見初始化文章
svn機器限制公司ip訪問,rsync都走內網同步
[[email protected] ~]# vim /etc/sysconfig/iptables

# Generated by iptables-save v1.4.7 on Tue May 23 19:12:38 2017
*filter
:INPUT ACCEPT [2:80]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1:140]

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -s 1.1.1.1 -m state --state NEW -m tcp -p tcp -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 10050 -j ACCEPT
#-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -s 192.168.9.0/24 -m state --state NEW -m tcp -p tcp -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
#
COMMIT

[[email protected]
/* */ ~]# service iptables start [[email protected] ~]# chkconfig iptables on 一,安裝apache+svn 1,安裝apache 查看系統是否安裝apr和apr-util包 [[email protected] ~]# rpm -qa | grep apr [[email protected] ~]# rpm -qa | grep apr-util 有則卸載,無則跳過(系統自帶影響apache使用) [[email protected] ~]# rpm -e --allmatches apr-util --nodeps [[email protected]
/* */ ~]# rpm -e --allmatches apr --nodeps 安裝依賴包 [[email protected] ~]# yum install gcc -y 源碼包下載 [[email protected] ~]# cd /usr/local/src/ [[email protected] src]# wget -c http://mirror.bit.edu.cn/apache/apr/apr-1.5.2.tar.gz [[email protected] src]# wget -c http://mirror.bit.edu.cn/apache/apr/apr-util-1.5.4.tar.gz [[email protected] src]# wget -c http://mirror.bit.edu.cn/apache/httpd/httpd-2.4.18.tar.gz [[email protected] src]# wget -c http://www.openssl.org/source/openssl-1.0.1k.tar.gz [[email protected] src]# wget -c http://mirrors.hust.edu.cn/apache/subversion/subversion-1.9.3.tar.gz [[email protected] src]# wget -c ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.38.tar.gz 安裝apr、apr-util [[email protected] src]# tar zxvf apr-1.5.2.tar.gz [[email protected] src]# cd apr-1.5.2 [[email protected] apr-1.5.2]# ./configure --prefix=/usr/local/apr [[email protected] apr-1.5.2]# make [[email protected] apr-1.5.2]# make install [[email protected] apr-1.5.2]# ./apr-1-config --version 1.5.2 [[email protected] apr-1.5.2]# cd /usr/local/src/ [[email protected] src]# tar zxvf apr-util-1.5.4.tar.gz [[email protected] src]# cd apr-util-1.5.4 [[email protected] apr-util-1.5.4]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/ [[email protected] apr-util-1.5.4]# make [[email protected] apr-util-1.5.4]# make install [[email protected] apr-util-1.5.4]# ./apu-1-config --version 1.5.4 安裝pcre [[email protected] src]# tar zxvf pcre-8.38.tar.gz [[email protected] src]# cd pcre-8.38 [[email protected] pcre-8.38]# ./configure --prefix=/usr/local/pcre [[email protected] pcre-8.38]# make [[email protected] pcre-8.38]# make install 安裝apache [[email protected] src]# tar zxvf httpd-2.4.18.tar.gz [[email protected] httpd-2.4.18]# ./configure --prefix=/usr/local/apache --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --enable-so --enable-dav --enable-maintainer-mode --enable-rewrite --enable-ssl --with-pcre=/usr/local/pcre/ [[email protected] httpd-2.4.18]# make [[email protected] httpd-2.4.18]# make install 安裝sqlite [[email protected] src]# wget -c http://www.sqlite.org/2016/sqlite-autoconf-3110100.tar.gz [[email protected] src]# tar zxvf sqlite-autoconf-3110100.tar.gz [[email protected] src]# mv sqlite-autoconf-3110100 sqlite [[email protected] src]# mv sqlite /usr/local/ [[email protected] src]# cd /usr/local/sqlite/ [[email protected] sqlite]# ./configure [[email protected] sqlite]# make [[email protected] sqlite]# make install 2,安裝svn [[email protected] src]# tar zxvf subversion-1.9.3.tar.gz [[email protected] src]# cd subversion-1.9.3 [[email protected] subversion-1.9.3]# mkdir -p ./sqlite-amalgamation [[email protected] subversion-1.9.3]# cp /usr/local/sqlite/sqlite3.c ./sqlite-amalgamation/ [[email protected] subversion-1.9.3]# ./configure --prefix=/usr/local/subversion --with-apxs=/usr/local/apache/bin/apxs --with-apr=/usr/local/apr/ --with-apr-util=/usr/local/apr-util/ --with-zlib --enable-maintainer-mode [[email protected] subversion-1.9.3]# make [[email protected] subversion-1.9.3]# make install [[email protected] ~]# /usr/local/subversion/bin/svnserve --version svnserve,版本 1.9.3 (r1718519) 編譯於 Mar 20 2016,13:09:32 在 x86_64-unknown-linux-gnu [[email protected] ~]# ls /usr/local/subversion/libexec/ mod_authz_svn.so mod_dav_svn.so 3,svn和apache整合 配置subversion 創建版本庫 [[email protected] ~]# mkdir -p /data0/svn [[email protected] ~]# /usr/local/subversion/bin/svnadmin create /data0/svn/showyw [[email protected] ~]# useradd svn -s /sbin/nologin [[email protected] ~]# chown -R svn.svn /data0/svn/showyw htpasswd生成訪問控制文件 [[email protected] ~]# /usr/local/apache/bin/htpasswd -c /data0/svn/conf/.htpasswd svnadmin New password: Re-type new password: Adding password for user admin [[email protected] ~]# /usr/local/apache/bin/htpasswd /data0/svn/conf/.htpasswd test New password: Re-type new password: Adding password for user test 編輯authz [[email protected] ~]# grep -v ‘^#‘ /data0/svn/conf/authz | grep -v ‘^$‘ [groups] admin = svnadmin yw = test ####################################################### [showyw:/] @admin = rw @yw = r 配置apache [[email protected] ~]# cd /usr/local/apache/ [[email protected] apache]# cp /usr/local/subversion/libexec/mod_authz_svn.so ./modules/ [[email protected] apache]# cp /usr/local/subversion/libexec/mod_dav_svn.so ./modules/ [[email protected] ~]# vim /usr/local/apache/conf/httpd.conf 更改用戶: User svn Group svn 在LoadModules的末端,加上 LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so 然後在配置末尾加上 <Location /svn> DAV svn SVNParentPath /data0/svn/ #SVN倉庫的父目錄 SVNListParentPath On SVNAutoversioning On SVNReposName "repos" AuthzSVNAccessFile /data0/svn/conf/authz #前面生成的訪問控制文件 AuthType Basic AuthName "hello,welcome to my repos!" AuthUserFile /data0/svn/conf/.htpasswd #用戶文件 Require valid-user </Location> 檢查語法 [[email protected] ~]# /usr/local/apache/bin/apachectl -t 啟動並查看是否啟動成功 [[email protected] ~]# /usr/local/apache/bin/apachectl -k start [[email protected] ~]# ps auxf | grep apache root 27995 0.0 0.1 228808 4920 ? Ss 13:50 0:00 /usr/local/apache/bin/httpd -k start www 27996 0.0 0.0 228556 2740 ? S 13:50 0:00 \_ /usr/local/apache/bin/httpd -k start www 27997 0.0 0.0 507768 3964 ? Sl 13:50 0:00 \_ /usr/local/apache/bin/httpd -k start www 27999 0.0 0.0 507768 3968 ? Sl 13:50 0:00 \_ /usr/local/apache/bin/httpd -k start www 28001 0.0 0.0 507768 3972 ? Sl 13:50 0:00 \_ /usr/local/apache/bin/httpd -k start [[email protected] ~]# netstat -anptu | grep 80 tcp 0 0 :::80 :::* LISTEN 27995/httpd 測試: http://127.0.0.1/svn/showyw 4,鉤子腳本 [[email protected] ~]# vim post-commit #!/bin/sh #REPOS="$1" #REV="$2" Log="/data0/logs/svn" chown -R svn /data0/web_root/web /usr/local/subversion/bin/svn update /data0/web_root/web/ >> ${Log}/web-svn.log if [ $? == 0 ] then echo "----------------------------------" >> ${Log}/web-svn-update.log 2>&1 echo "START:`date +‘%F %T‘`" >> ${Log}/web-svn-update.log 2>&1 /bin/bash /data0/svn/bin/web-update.sh echo "END:`date +‘%F %T‘`" >> ${Log}/web-svn-update.log 2>&1 echo "----------------------------------" >> ${Log}/web-svn-update.log 2>&1 fi [[email protected] ~]# vim /data0/svn/bin/web-update.sh #!/bin/bash #client-->server IP="127.0.0.1" Auth_module="showyw" Localdir="/data0/web_root/showyw" /usr/bin/rsync -rutz --progress --exclude-from=/data0/svn/bin/exclude.list --delete ${Localdir} $IP::$Auth_module [[email protected] ~]# cat /data0/svn/bin/exclude.list .svn **.gz branches docs tags .log 二、分發機rsync服務端 分發機rsync配置文件 [[email protected] ~]# vim /etc/rsyncd.conf #list=yes uid=root gid=root max connections=100 log file=/data0/logs/rsync/rsyncd.log pid file=/var/run/rsyncd.pid lock file=/var/run/rsync.lock hosts deny=* ############################ [showyw] path=/data/web_root/showyw comment=show #ignore errors read only=no hosts allow=192.168.9.176 127.0.0.1 192.168.9.168 #/usr/bin/rsync --daemon --config=/etc/rsyncd.conf 三、web1機器rsync客戶端拉取代碼計劃任務 [[email protected] ~]# crontab -l /1 * * * * /bin/sh /home/maintain/crontab_rsync.sh > /dev/null 2>&1 [[email protected] ~]# cat /home/maintain/crontab_rsync.sh #!/bin/sh echo "showyw==================">>/data0/logs/rsync/rsync.error date>>/data0/logs/rsync/rsync.error /usr/bin/rsync -vaz --progress [email protected]::showyw /data0/web_root/showyw 2>>/data0/logs/rsync/rsync.error


3----svn版本控制部署+分發機