求教系统上线代码,回滚操作,除了 rsync 还有什么技术可以实现 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
ecosky
V2EX    Linux

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

  •  
  •   ecosky 2016-07-04 10:42:43 +08:00 5995 次点击
    这是一个创建于 3398 天前的主题,其中的信息可能已经有所发展或是发生改变。
    业务场景:
    上线 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     Solana     4929 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 09:40 PVG 17:40 LAX 02:40 JFK 05:40
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86