V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
ecosky
V2EX  ›  Linux

求教系统上线代码,回滚操作,除了 rsync 还有什么技术可以实现

  •  
  •   ecosky · 2016-07-04 10:42:43 +08:00 · 5559 次点击
    这是一个创建于 3065 天前的主题,其中的信息可能已经有所发展或是发生改变。
    业务场景:
    上线 web 代码,是用 svn 作为版本管理,目前我的正常流程是在代码目录执行 svn 操作,再在代码目录执行 rsync 同步到生产代码目录。但是领导指出 rsync 会丢文件,不是 100%可靠,必须换另一套方案。如果换成在代码目录执行 svn 信息,把操作信息记录下来,然后写 shell 移动文件的话,替换文件可行,但是 svn 的删除文件什么的,实在麻烦,请教各位,有什么可行性的操作方法么?
    22 条回复    2016-07-06 10:34:34 +08:00
    ljbha007
        1
    ljbha007  
       2016-07-04 10:51:41 +08:00
    git 建个发布分支 jenkins 监控发布分支 并执行测试、编译、部署操作
    UnisandK
        2
    UnisandK  
       2016-07-04 10:52:40 +08:00
    docker 。。
    evlos
        3
    evlos  
       2016-07-04 10:55:25 +08:00
    Capistrano
    2owe
        4
    2owe  
       2016-07-04 10:56:53 +08:00
    区分操作机和线上机,提供个思路哈:
    1. 代码检出。操作机上一个项目的代码目录,每次检出到这个目录。
    2. 代码传输。由检出目录打包,将打包目录传输至线上机。
    3. 代码部署。解压缩代码打包至一哈希目录,线上代码目录软链至该哈希目录。
    4. 代码回滚。线上代码目录软链至要回滚到的哈希目录。
    lijinma
        5
    lijinma  
       2016-07-04 10:57:20 +08:00
    ruby 用 Capistrano

    发布代码这种,你服务器上肯定要保存每次发布的版本,使用软连接来指向正在使用的版本:

    release_v1
    release_v2
    release_v3

    release -> 在用的版本
    MarioxLinux
        6
    MarioxLinux  
       2016-07-04 10:59:23 +08:00
    Jenkins 你值得拥有,部署简单( yum install )配置容易
    yingling
        7
    yingling  
       2016-07-04 11:13:07 +08:00   ❤️ 1
    专业运维路过.

    把代码包打包成 tgz 文件.计算出 md5 值.
    线上机器分发 tgz 文件和保存 md5 值的文件. 重新计算 tgz 的 md5 值,和文件中的 md5 值做匹配.

    如果一致, 替换老的代码目录..

    目前 BAT 都是这么做的
    des
        8
    des  
       2016-07-04 11:47:17 +08:00 via Android
    @yingling 直接停机替换的??是不是状态无关的业务?
    SourceMan
        9
    SourceMan  
       2016-07-04 11:49:05 +08:00
    编译机编译打包 -> 生产机备份 web 目录、部署 tar 包 -> 回滚
    caola
        10
    caola  
       2016-07-04 12:00:10 +08:00
    我现在也是使用 svn+rsync ,但从没有遇到过文件会丢失这种问题,
    可能是你的源服务器没有文件,从服务器有的文件,一但同步了,那么从服务器有的文件会被删除,
    如果是从服务器有数据上传(比如图片),那么可以设置同步源服务器时,排除掉图片的目录啊
    源服务器一般只是 svn 的,不会有正式服务器的完整数据,
    这时就要排除不需要同步的目录 或者 同步时不删除文件
    9hills
        11
    9hills  
       2016-07-04 12:00:44 +08:00
    让你们领导说清楚 rsync 为什么会丢文件,简直拍脑袋
    huangzxx
        12
    huangzxx  
       2016-07-04 12:46:35 +08:00
    rsync 丢文件? 我们一个月发这么多文件,都没丢过。

    $ cat /data1/logs/rsyncd.log.d/2016-06* |grep -w send |wc -l
    284712
    tomczhen
        13
    tomczhen  
       2016-07-04 13:30:05 +08:00 via iPhone
    问题的关键不是丢文件,而是如何确定部署的结果与预期一致,计算文件 hash 就是一个办法。当然,前面也有人说了,同步后的结果与源文件一致,但是并不符合期望也是有可能的,这大概就是你们领导说的“丢文件”了。还是从调整同步策略和如何校验部署结果入手比较好。
    ecosky
        14
    ecosky  
    OP
       2016-07-04 13:31:17 +08:00
    上面有些回复说是 tar 包然后直接回滚,这是每次更新都是一个新的 web 目录么?如果只是更新一些 css 文件,也直接新目录,我这 web 目录都要好几个 G ,感觉不是很科学啊
    br00k
        15
    br00k  
       2016-07-04 14:19:27 +08:00
    jenkins 好用。
    tomczhen
        16
    tomczhen  
       2016-07-04 14:21:56 +08:00
    @ecosky 囧,人家 web 框架也分 MVT , MVC , MVP 之类的,你更新上也用同样的思路就好了。将静态资源 /模板与动态代码的更新分离解耦就好了。
    fcicq
        17
    fcicq  
       2016-07-04 17:05:52 +08:00
    zfs snapshot
    ytmsdy
        18
    ytmsdy  
       2016-07-04 19:05:46 +08:00
    应用文件手工复制一份在服务器上面!
    cxbig
        19
    cxbig  
       2016-07-04 19:34:08 +08:00
    capistrano +1
    zxq1002
        20
    zxq1002  
       2016-07-04 19:53:46 +08:00 via Android
    git 呗,再用 jenkins 调度下,购简单
    vghdjgh
        21
    vghdjgh  
       2016-07-04 20:10:54 +08:00
    git pull
    git reset --hard HEAD^
    qingchn
        22
    qingchn  
       2016-07-06 10:34:34 +08:00
    jenkis
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1232 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 23:46 · PVG 07:46 · LAX 15:46 · JFK 18:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.