分享一个生产环境中利用SVN上线代码的脚本
2016-03-05 13:50
459 查看
本文讲述的是利用SVN+RSYNC上线代码的生产案例,适用于小型公司及企业,让运维从频繁的上线代码中解脱出来。以下对应的web服务器也适用于Windows服务器及Linux服务器
主机配置文件HOST_CONF
#tags可以有多个
排除文件EXCLUDE_CONF
流程说下:
项目下面有2个文件夹,SVN判断提交的文件夹目录来判断同步的是测试服务器还是生产服务器
dev
tags
2个目录
开发人员将在本机测试好的程序提交到dev目录,程序自动同步到测试服务器进行测试。
由测试人员,测试OK后,将应用程序增量或者全量上线到生产服务器
增量上线:
比如开发在dev下增加或者修改了a.php文件,现在只需要将此文件放到最近的一个tags/{版本号}/对应的目录下面即可
全量上线:
只需要利用svn的新建分支功能即可,分支的路径为/dev/{自定义版本号},即可实现全量上线
回滚:
利用svn找回上一版本,然后覆盖提交即可
如有问题,不吝赐教!
本文出自 “枫林晚” 博客,请务必保留此出处http://fengwan.blog.51cto.com/508652/1747824
REPOS="$1" REV="$2" export LANG=zh_CN.UTF-8 export RSYNC_PASSWORD=RSYNC_PASSWORD RSYNC_USER=RSYNC_USER PROJECT_NAME=`basename $REPOS` SVN_DIR=/svndata/project/${PROJECT_NAME}/ WEB_DIR=/app/${PROJECT_NAME}/ HOST_CONF="/svndata/conf/host/${PROJECT_NAME}" EXCLUDE_CONF="/svndata/conf/exclude/${PROJECT_NAME}.txt" if [ ! -d $WEB_DIR ];then mkdir -p $WEB_DIR /usr/bin/svn checkout file://$SVN_DIR $WEB_DIR else /usr/bin/svn update $WEB_DIR fi test -f $HOST_CONF || exit 3 DEV_VERSION=`/usr/bin/svnlook changed $SVN_DIR|grep "dev"|awk '{print $2}'|awk -F'/' '{print $2}'|head -n1` if [ $DEV_VERSION ];then for HOST in `cat $HOST_CONF|sed 's/^[ \t]*//g'|grep -v '^#'|grep 'dev:'|awk -F':' '{print $2}'` do /usr/bin/rsync -rvzP --delete --port=873 --exclude='.svn/' $WEB_DIR/dev/ $RSYNC_USER@${HOST}::${PROJECT_NAME} >>/tmp/dev_${PROJECT_NAME}_`date +%Y%m%d`.log done fi tags_check=`/usr/bin/svnlook changed $SVN_DIR|grep 'tags'|awk '{print $1}'|grep -E "A|U" |wc -l` if [ $tags_check -ne 0 ];then TAGS_VERSION=`/usr/bin/svnlook changed $SVN_DIR|grep "tags"|awk '{print $2}'|awk -F'/' '{print $2}'|head -n1` TAGS_SIZE=`du -s $WEB_DIR/tags/${TAGS_VERSION}|awk '{print $1}'` if [ $TAGS_VERSION ] && [ $TAGS_SIZE -gt 20 ];then for HOST in `cat $HOST_CONF|sed 's/^[ \t]*//g'|grep -v '^#'|grep 'tags:'|awk -F':' '{print $2}'` do echo "`date +%Y-%m-%d_%H:%M:%S` start to sync $PROJECT_NAME to ${HOST} WebServer ">>/tmp/tags_${PROJECT_NAME}_`date +%Y%m%d`.log /usr/bin/rsync -rvzP --delete --port=873 --exclude-from=${EXCLUDE_CONF} $WEB_DIR/tags/${TAGS_VERSION}/ $RSYNC_USER@${HOST}::${PROJECT_NAME} >>/tmp/tags_${PROJECT_NAME}_`date +%Y%m%d`.log echo "sync end to ${HOST}">>/tmp/tags_${PROJECT_NAME}_`date +%Y%m%d`.log done echo "###`date +%Y-%m-%d_%H:%M:%S`###############################################">>/tmp/tags_${PROJECT_NAME}_`date +%Y%m%d`.log fi fi unset RSYNC_PASSWORD exit 0
主机配置文件HOST_CONF
dev:192.168.2.21 tags:192.168.2.30 tags:192.168.2.30#dev只有一个
#tags可以有多个
排除文件EXCLUDE_CONF
.svn/ check_chk.html index.html可以实现某些文件不做同步,如生成的缓存及上传的图片等等
流程说下:
项目下面有2个文件夹,SVN判断提交的文件夹目录来判断同步的是测试服务器还是生产服务器
dev
tags
2个目录
开发人员将在本机测试好的程序提交到dev目录,程序自动同步到测试服务器进行测试。
由测试人员,测试OK后,将应用程序增量或者全量上线到生产服务器
增量上线:
比如开发在dev下增加或者修改了a.php文件,现在只需要将此文件放到最近的一个tags/{版本号}/对应的目录下面即可
全量上线:
只需要利用svn的新建分支功能即可,分支的路径为/dev/{自定义版本号},即可实现全量上线
回滚:
利用svn找回上一版本,然后覆盖提交即可
如有问题,不吝赐教!
本文出自 “枫林晚” 博客,请务必保留此出处http://fengwan.blog.51cto.com/508652/1747824
相关文章推荐
- 利用vba将excel中的图片链接直接转换为图片
- 白话Spring(基础篇)---AOP(实例篇-4)
- 软件工程实验一--编程随机生成30个四则运算,算数包括100以内的整数和真分数。
- 连续子数组的最大和 java实现
- 【学习C++】1.开始学习C++
- 1026. Table Tennis (30)
- Java中方法不可以有默认参数
- PHP - 直接输出对象的版本问题
- java采用MD5加密解密
- 【C++学习之路】派生类的构造函数(三)
- github 流程介绍
- 【RxJava Demo分析】(二)Schedulers线程调度器
- java学习笔记-java泛型
- [疯狂Java笔记]事件处理:Java事件处理模型
- C#方法的重载(overload)、重写(override)、隐藏(new)
- 一起看代码来玩玩QT之18 QSqlDatabase (three 将database 通过 QTableView显示到界面上,并且增删改查
- Android开发问题记录(一)——启动Eclipse报错:发现了以元素 'd:skin' 开头的无效内容
- Java web学习(二)
- PHP中不同编码的汉字占的字节数不同gbk,GBK,UTF-8,utf-8
- 白话Spring(基础篇)---AOP(实例篇-3)