svn提交自动更新web服务器

当WEB服务使用了负载均衡之后,发布代码就没有单机发布那么简单了。

单机的时候,可以本地开发测试通过,提交svn,然后ssh到服务器上,再服务器上svn up下,即可更新代码了。

但是当web服务后端由多台机器来提供服务的时候,这个方法就有点太慢了,如果开发人员一旦忘记了,那就惨了。

当然上面说的是小作坊的方式。大团队有更多人力精力研究自动化部署那肯定更好啦。

当初给朋友设计的是采用svn,truck目录有更新,利用svn的post-commit钩子脚本在每次提交commit操作后自动运行来自动更新web服务器上的代码。


环境介绍下:svn服务是在一个web服务器上搭建的,还有另外一个web服务器。
svn有提交,自动更新跟svn在同一个服务器上的web代码,然后ssh到另外一个服务器上,执行svn up命令。
这个前提是需要让web服务器之间可以ssh免密登录

#!/bin/sh   

REPOS="$1"                              # 仓库的路径   
REV="$2"                                # 新提交的版本号   
LOGFILE=/data/svnlog/autoUpdate.log     # 钩子脚本的日志   

export LANG='zh_CN.UTF-8'               # 设置本地字符集编码,防止乱码

# 脚本的标准输出和标准错误输出都打印到日志文件里   
exec 1>>"$LOGFILE" 
exec 2>&1   

SVN=/usr/bin/svn
SVNLOOK=/usr/bin/svnlook
TIME=$(date "+%Y-%m-%d %H:%M:%S")           # 时间
AUTHOR=$($SVNLOOK author -r $REV "$REPOS")  # 提交作者   
CHANGEDDIRS=$($SVNLOOK dirs-changed $REPOS) # 修改的目录集合   
MESSAGE=$($SVNLOOK log -r $REV "$REPOS")    # 提交时的备注信息,不建议用中文   
    
# SVN客户端配置,需要自行修改**********************************   
SERVERA=qr149        #服务器

WEBROOT=/data/wwwroot/webroot/api    #WEB服务器的代码根目录   
SVNUSER="publish" 
SVNPASSWD="password" 
#**************************************************************   
    
function myecho() {   
    echo "$TIME" "$*" 
}   
    
myecho "**************************************************************" 
myecho "Start By `whoami`"
myecho "提交版本:$REV 作者:$AUTHOR" 
myecho "提交备注:$MESSAGE" 
myecho "修改目录:$(echo $CHANGEDDIRS | tr '\n' ' ')" 
    
MASTERDIR=$(echo "$CHANGEDDIRS" | head -1)  #CHANGEDDIRS里的主目录   
# 遍历提交的代码目录,同步到WEB服务器上   

DIR=$(echo $MASTERDIR | awk -F / '{print $1}')   
# 判断项目文件夹   
if [ "$DIR" == "truck" ];then  
    myecho   
    myecho "Truck目录被更新";
    myecho "开始同步本地";
    # --no-auth-cache 阻止在Subversion管理区缓存认证信息(如用户名密码)
    # --non-interactive 如果认证失败,或者是不充分的凭证时,防止出现要求凭证的提示(例如用户名和密码)。这在运行自动脚本时非常有用,只是让Subversion失败而不是提示更多的信息
    $SVN update $WEBROOT --username $SVNUSER --password $SVNPASSWD --no-auth-cache --non-interactive
    chown -R www:www  $WEBROOT
    chmod -R 775 $WEBROOT
    myecho "开始同步另外一台服务器";
    # 无密码ssh连接到客户端服务器,执行svn up   
    /usr/bin/ssh root@$SERVERA "export LANG=en_US.UTF-8; svn update '$WEBROOT' --username $SVNUSER --password $SVNPASSWD --no-auth-cache --non-interactive >> '$LOGFILE';chown -R www:www  '$WEBROOT'; chmod -R 775 '$WEBROOT'"
else 
    myecho "非Truck目录更新,服务器端忽略"  
fi

日志如下:

2018-03-10 22:12:32 **************************************************************
2018-03-10 22:12:32 Start By root
2018-03-10 22:12:32 提交版本:23 作者:naodai
2018-03-10 22:12:32 提交备注:合并了修改版本号 从 truck:
2018-03-10 22:12:32 修改目录:branches/v1/ branches/v1/system/ 
2018-03-10 22:12:32 非Truck目录更新,服务器端忽略
2018-03-10 22:19:45 **************************************************************
2018-03-10 22:19:45 Start By root
2018-03-10 22:19:45 提交版本:24 作者:naodai
2018-03-10 22:19:45 提交备注:合并了修改版本号 从 branches/v1/system:
2018-03-10 22:19:45 修改目录:truck/system/ truck/system/backend/controllers/ truck/system/backend/models/ truck/system/backend/views/ truck/system/backend/views/layouts/ truck/system/backend/w
eb/ truck/system/common/config/ 
2018-03-10 22:19:45 
2018-03-10 22:19:45 Truck目录被更新
2018-03-10 22:19:45 开始同步本地
A    /data/wwwroot/xxx
U    /data/wwwroot/xxx
U    /data/wwwroot/xxx
 U   /data/wwwroot/xxx/system
更新到版本 24。
2018-03-10 22:19:45 开始同步149服务器
2018-03-10 22:21:19 **************************************************************
2018-03-10 22:21:19 Start By root
2018-03-10 22:21:19 提交版本:25 作者:naodai
2018-03-10 22:21:19 提交备注:db config
2018-03-10 22:21:19 修改目录:truck/system/common/config/ 
2018-03-10 22:21:19 
2018-03-10 22:21:19 Truck目录被更新
2018-03-10 22:21:19 开始同步215本地
U    /data/wwwroot/xxx/api/system/common/config/main-local.php
更新到版本 25。
2018-03-10 22:21:19 开始同步149服务器
2018-03-10 23:58:10 **************************************************************
2018-03-10 23:58:10 Start By root
2018-03-10 23:58:10 提交版本:26 作者:aaa
2018-03-10 23:58:10 提交备注:当面
2018-03-10 23:58:10 修改目录:branches/v1/v1/ branches/v1/v1/tool/dangmianfu/aop/ 
2018-03-10 23:58:10 非Truck目录更新,服务器端忽略
2018-03-11 00:22:12 **************************************************************
2018-03-11 00:22:12 Start By root
2018-03-11 00:22:12 提交版本:30 作者:aaa
2018-03-11 00:22:12 提交备注:当面付
2018-03-11 00:22:12 修改目录:truck/v1/ truck/v1/tool/dangmianfu/f2fpay/service/ 
2018-03-11 00:22:12 
2018-03-11 00:22:12 Truck目录被更新
2018-03-11 00:22:12 开始同步215本地
U    /data/wwwroot/xxx/api/v1/create.php
U    /data/wwwroot/xxx/api/v1/tool/dangmianfu/f2fpay/service/AlipayTradeService.php
 U   /data/wwwroot/xxx/api/v1
更新到版本 30。
2018-03-11 00:22:12 开始同步149服务器
2018-03-11 01:07:19 **************************************************************
2018-03-11 01:07:19 Start By root
2018-03-11 01:07:19 提交版本:31 作者:aaa
2018-03-11 01:07:19 提交备注:当面付
2018-03-11 01:07:19 修改目录:branches/v1/v1/ 
2018-03-11 01:07:19 非Truck目录更新,服务器端忽略
2018-03-11 01:07:47 **************************************************************
2018-03-11 01:07:47 Start By root
2018-03-11 01:07:47 提交版本:32 作者:aaa
2018-03-11 01:07:47 提交备注:当面付
2018-03-11 01:07:47 修改目录:truck/v1/ 
2018-03-11 01:07:47 
2018-03-11 01:07:47 Truck目录被更新
2018-03-11 01:07:47 开始同步215本地
U    /data/wwwroot/xxx/api/v1/create.php
U    /data/wwwroot/xxx/api/v1/notifyUrlMinshengBank.php
 U   /data/wwwroot/xxx/api/v1
更新到版本 32。
2018-03-11 01:07:47 开始同步149服务器
2018-03-11 01:14:38 **************************************************************
2018-03-11 01:14:38 Start By root
2018-03-11 01:14:38 提交版本:33 作者:aaa
2018-03-11 01:14:38 提交备注:当面付
2018-03-11 01:14:38 修改目录:branches/v1/v1/ 
2018-03-11 01:14:38 非Truck目录更新,服务器端忽略

发表评论

电子邮件地址不会被公开。 必填项已用*标注