主要思路:

1、做三个文件夹,用于放置不可随意修改的配置文件(测试发布、预发布、真实发布)

2、每次都先修改配置文件再进行构建(构建时会先把配置文件复制到构建的目录,再同步到发布的目录)

3、发布完代码后,创建备份目录并复制代码到备份目录进行备份

4、使用脚本需要传执行类型和构建ID

shell脚本如下:

#!/bin/sh

echo "$1"
model=$
echo "${model}"
version=$
project_MainDir="/data/www/vhosts/git_track/ods"
project_ConfigDir="${project_MainDir}/config"
project_srcDir="${project_MainDir}/src"
project_BuildDir="${project_MainDir}/builds"
project_ExcludeFile="${project_MainDir}/shell/exclude.txt"
project_DeployDir="/data/www/vhosts/ods.wondershare.cn/httpdocs"
project_PreDir="/data/www/vhosts/test-ods.wondershare.cn/httpdocs"

rsync_Passwd="/usr/local/rsync/etc/rsyncd206.passwd"
case $model in
    deploy_Test)
                echo "deploy_model: ${model}"
                echo "version: ${version}"
                #复制配置文件
                yes | cp -f ${project_ConfigDir}/test/application/database.php ${project_srcDir}/test/application/
                yes | cp -f ${project_ConfigDir}/test/application/config.php ${project_srcDir}/test/application/
        #同步代码到发布目录
        /usr/local/rsync/bin/rsync -zavP --exclude-from=${project_ExcludeFile} --delete  ${project_srcDir}/test/ ${project_DeployDir}
        chown -R apache.users ${project_DeployDir}
                #创建备份目录
                mkdir ${project_BuildDir}/T${version}
                #把代码复制到备份目录
                cp -r ${project_srcDir}/test/* ${project_BuildDir}/T${version}/

        ;;
    deploy_Pre)
                echo "deploy_model: ${model}"
                echo "version: ${version}"
        yes | cp -f ${project_ConfigDir}/pre/application/database.php ${project_srcDir}/release/application/
        yes | cp -f ${project_ConfigDir}/pre/application/config.php ${project_srcDir}/release/application/
                /usr/local/rsync/bin/rsync -zrltDvP --exclude-from=${project_ExcludeFile} --delete --password-file=${rsync_Passwd} ${project_srcDir}/release/ apache@192.168.10.206::apache${project_PreDir}/
        mkdir ${project_BuildDir}/P${version}
        cp -r ${project_srcDir}/release/* ${project_BuildDir}/P${version}/
        ;;
    deploy_Real)
                echo "deploy_model: ${model}"
                echo "version: ${version}"
                yes | cp -f ${project_ConfigDir}/real/application/database.php ${project_srcDir}/release/application/
                yes | cp -f ${project_ConfigDir}/real/application/config.php ${project_srcDir}/release/application/
                /usr/local/rsync/bin/rsync -zrltDvP --exclude-from=${project_ExcludeFile} --delete --password-file=${rsync_Passwd} ${project_srcDir}/release/ apache@192.168.10.206::apache${project_DeployDir}/
                mkdir ${project_BuildDir}/R${version}
                cp -r ${project_srcDir}/release/* ${project_BuildDir}/R${version}/
        ;;
    rollback_Pre)

                echo "rollback_model: ${model}"
                echo "version: ${version}"
        #echo "/usr/local/rsync/bin/rsync -zrltDvP --exclude-from=${project_ExcludeFile} --delete --password-file=${rsync_Passwd} ${project_BuildDir}/P${version}/ apache@192.168.10.206::apache${project_DeployDir}/${project_PreDir}/" > /test.txt
        /usr/local/rsync/bin/rsync -zrltDvP --exclude-from=${project_ExcludeFile} --delete --password-file=${rsync_Passwd} ${project_BuildDir}/P${version}/ apache@192.168.10.206::apache${project_PreDir}/
        ;;
    rollback_Real)
        echo "rollback_model: ${model}"
        echo "version: ${version}"
                /usr/local/rsync/bin/rsync -zrltDvP --exclude-from=${project_ExcludeFile} --delete --password-file=${rsync_Passwd} ${project_BuildDir}/R${version}/ apache@192.168.10.206::apache${project_DeployDir}/
        ;;
    *)
        exit
        ;;
esac

1、测试发布

2、预发布:

2、真实发布:

3、回滚发布:

case $deploy_evn in
    Rollback_Pre)
        url="$pre_version"
        ;;
    Rollback_Real)
        url="$real_version"
        ;;
    *)
        exit
        ;;
esac

model="$deploy_evn"
projectName=`echo "$url"|awk -F '/' '{print $6}'`
rollbackID=`echo "$url"|awk -F '/' '{print $7}'`

/bin/sh /usr/local/rsync/woshrs/hrs.sh $model $rollbackID

最新文章

  1. JavaScript基础学习-函数及作用域
  2. 当云遇见APP性能测试会怎样?
  3. 安装一些包管理的记录 win10
  4. 关于IIS部署时出现“System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本”的问题解决摘要
  5. 25套用于 Web UI 设计的免费 PSD 网页元素模板
  6. Speed-BI数据分析案例:2016年7月汽车销量排行榜
  7. <<易货>>项目Postmortem结果
  8. tty -s && mesg n
  9. TVM 下载监控
  10. Oracle Outline总结
  11. 《Android开发艺术探索》读书笔记 (2) 第2章 IPC机制
  12. 使用bat将优盘中的dig加到系统环境变量
  13. Oracle中rownum的说明及使用技巧
  14. 递归处理vue菜单数据
  15. hive的join
  16. CSS3绘制特殊图形
  17. MIUI 10以上版本通用线刷ROOT方法
  18. 在windows 上的RedisClient 上连接远程linux redis ("jave.net.ConnectException: Connection refused:connect")
  19. Linux用户名、用户组的相关命令
  20. Atitit 转移特效attilax总结

热门文章

  1. 《一头扎进SpringMvc视频教程》Rest风格的资源URL
  2. 20165237 学习基础和C语言基础调查
  3. PHP反序列化漏洞学习
  4. 必须要学会webpack打包,并到特别精通的程度
  5. ajax跨域请求 Uncaught SyntaxError: Unexpected token :
  6. 学习awk命令的使用
  7. 手动注册 Omron SYSMAC OPC Server 2
  8. Java 处理 XML
  9. Laravel 5.2数据库--多个关联关系,带条件约束的渴求式加载的问题
  10. JMS消息队列之ActiveMQ简单示例