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

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

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

release_v1
release_v2
release_v3

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

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

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

目前 BAT 都是这么做的
des
2016-07-04 11:47:17 +08:00
@yingling 直接停机替换的??是不是状态无关的业务?
SourceMan
2016-07-04 11:49:05 +08:00
编译机编译打包 -> 生产机备份 web 目录、部署 tar 包 -> 回滚
caola
2016-07-04 12:00:10 +08:00
我现在也是使用 svn+rsync ,但从没有遇到过文件会丢失这种问题,
可能是你的源服务器没有文件,从服务器有的文件,一但同步了,那么从服务器有的文件会被删除,
如果是从服务器有数据上传(比如图片),那么可以设置同步源服务器时,排除掉图片的目录啊
源服务器一般只是 svn 的,不会有正式服务器的完整数据,
这时就要排除不需要同步的目录 或者 同步时不删除文件
9hills
2016-07-04 12:00:44 +08:00
让你们领导说清楚 rsync 为什么会丢文件,简直拍脑袋
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
2016-07-04 13:30:05 +08:00
问题的关键不是丢文件,而是如何确定部署的结果与预期一致,计算文件 hash 就是一个办法。当然,前面也有人说了,同步后的结果与源文件一致,但是并不符合期望也是有可能的,这大概就是你们领导说的“丢文件”了。还是从调整同步策略和如何校验部署结果入手比较好。
ecosky
2016-07-04 13:31:17 +08:00
上面有些回复说是 tar 包然后直接回滚,这是每次更新都是一个新的 web 目录么?如果只是更新一些 css 文件,也直接新目录,我这 web 目录都要好几个 G ,感觉不是很科学啊
br00k
2016-07-04 14:19:27 +08:00
jenkins 好用。
tomczhen
2016-07-04 14:21:56 +08:00
@ecosky 囧,人家 web 框架也分 MVT , MVC , MVP 之类的,你更新上也用同样的思路就好了。将静态资源 /模板与动态代码的更新分离解耦就好了。
fcicq
2016-07-04 17:05:52 +08:00
zfs snapshot
ytmsdy
2016-07-04 19:05:46 +08:00
应用文件手工复制一份在服务器上面!
cxbig
2016-07-04 19:34:08 +08:00
capistrano +1
zxq1002
2016-07-04 19:53:46 +08:00
git 呗,再用 jenkins 调度下,购简单

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/290092

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX