主要思路:

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

jenkins 实现测试发布、预发布、真实发布、回滚发布的更多相关文章

  1. k8s deployment 金丝雀发布 更新的 暂停 恢复 回滚

    假设现在有业务需求,计划将所有的nginx 从镜像版本1.14更新到1.15,这一次发布不紧需要平滑发布,还需要 金丝雀发布,及确认其中一个Pod没有问题后在进行剩余的更新. 暂停与恢复也可以使用ym ...

  2. Ubuntu系统下使用Jenkins进行项目的自动构建还是项目回滚方法

    上面虽然实现了项目的自动部署,但是有时部署失败的时候我们需要回滚到指定版本的构建,这样才能更灵活的进行项目的构建部署.我们可以选择“参数化的构建过程”进行传递不同的参数来选择是进行新的构建还是回滚 如 ...

  3. jenkins 回滚发布

    #jenkins拉取文件路径 workspace=/data/wos/testtemp #备份路径 backspace=/data/wos/back #不能提Git的文件 config=/data/w ...

  4. 2、jenkins+svn自动发布和回滚

    Jenkins配置回滚思路: 目前只能实现使用salt来管控配置文件的管控,配置文件的版本回滚需要后续定制化开发,或者进行格外其他的管理操作.后续实现 以下配置可以为每个项目备份构建文件到本地指定路径 ...

  5. Jenkins实用发布与回滚PHP项目生产实践

    目录 1.概述 2.项目实践 2.1.环境说明 2.2.Jenkins配置 2.2.1.修改Jenkins的运行用户 2.2.2.配置Jenkins用户和Gitlab的ssh-key 2.2.3.Je ...

  6. Jenkins发布回滚方案

    Jenkins回滚可以通过每次发布从主干打tag,然后发布的时候发tag,比如tag, v1, v2,v3 如果我发布了v3,想要回滚回v2,直接在Jenkins中选择v2的tag地址重新构建就可以回 ...

  7. docker swarm实现java项目的发布/滚动更新/回滚/镜像管理

    使用docker swarm滚动更新java项目,部署集群,这一切的前提是使用Jenkins+maven进行项目打包,分发等功能 具体可以参考我的另外三篇文章 https://www.cnblogs. ...

  8. Jenkins实现生产环境部署文件的回滚操作(Windows)

    由于dotnet项目的生产环境环境部署工具比较少,所以我使用jenkins作为生产环境的自动化部署工具. 既然有回滚操作,那么就会有部署操作:要实现回滚,先要实现部署的操作,我在jenkins搭建了一 ...

  9. 9.2 k8s结合Jenkins与gitlab实现代码升级与回滚

    1.部署Jenkins 1.1 安装jdk # apt 安装jdk11 apt install openjdk-11-jdk # 查看 root@jenkins:~# java -version op ...

随机推荐

  1. linux 文件搜索命令

  2. 微信小程序滚动Tab选项卡:左右可滑动切换

    最终效果如上.问题: 1.tab标题总共8个,所以一屏无法全部显示. 2.tab内容区左右滑动切换时,tab标题随即做标记(active). 3.当active的标题不在当前屏显示时,要使其能显示到当 ...

  3. 拦截RESTful API并做相应处理的方式

    ⒈使用Filter(过滤器) package cn.coreqi.security.filter; import org.springframework.stereotype.Component; i ...

  4. SpringCloud Netflix Eureka(服务注册/发现)

    ⒈Eureka是什么? Eureka是Netflix的一个子模块,也是核心模块之一,Eureka是一个基于REST的服务,用于定位服务以实现云端中间层服务发现和故障转移,服务注册与发现对于微服务架构来 ...

  5. 【转】简单谈谈python的反射机制

    [转]简单谈谈python的反射机制 对编程语言比较熟悉的朋友,应该知道“反射”这个机制.Python作为一门动态语言,当然不会缺少这一重要功能.然而,在网络上却很少见到有详细或者深刻的剖析论文.下面 ...

  6. 【Android休眠】之PowerKey唤醒源实现【转】

    转自:https://blog.csdn.net/u013686019/article/details/53677531 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog ...

  7. 通过全备+relaylog同步恢复被drop的库或表【转】

    MySQL 中drop 等高危误操作后恢复方法 实验目的: 本次实验以恢复drop操作为例,使用不同方法进行误操作的数据恢复. 方法: 利用master同步 伪master+Binlog+同步 利用b ...

  8. 利用Linux系统生成随机密码的10种方法【转】

    Linux操作系统的一大优点是对于同样一件事情,你可以使用高达数百种方法来实现它.例如,你可以通过数十种方法来生成随机密码.本文将介绍生成随机密码的十种方法. 1. 使用SHA算法来加密日期,并输出结 ...

  9. zookeeper3.4.6配置实现自动清理日志【转】

    在使用zookeeper过程中,我们知道,会有dataDir和dataLogDir两个目录,分别用于snapshot和事务日志的输出(默认情况下只有dataDir目录,snapshot和事务日志都保存 ...

  10. C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法

    有些成员变量的数据类型比较特别,它们的初始化方式也和普通数据类型的成员变量有所不同.这些特殊的类型的成员变量包括: a.引用 b.常量 c.静态 d.静态常量(整型) e.静态常量(非整型) 常量和引 ...