当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 [email protected]$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目录更新,服务器端忽略