请教可靠、快速、安全的持续集成、持续部署方案

2018-06-10 14:54:33 +08:00
 koalli

我最近自己的一个 Node.js 小项目准备要部署到服务器上,忽然想到这么一个问题:

如果我这个小项目要部署要 100 台服务器上(可能更多),我该怎么办?

首先我想到了公司在用的 Jenkins,由 Jenkins 来进行 iOS、Android、windows 项目的编译打包,同时也承担了服务器的部署。

我们服务器部署是在 Jenkins 里面配置了目标服务器的 ip、ssh 公钥等信息,通过 ssh 连接目标服务器,发送文件然后在目标服务器执行脚本。

这样虽然可以实现,但是如果要发布到大量服务器的话这样的方案明显是不可取的,单单是发送文件就得耗费大量的时间,Jenkins 保存服务器 ip、公钥的方式维护起来也会很麻烦。

我网上查了很多资料好像很少这种案例,然后我就想来请教 v2er 们,大家都是怎么样处理这种问题的?

如何管理、维护大量的服务器?怎么样可靠、快速、安全的实现这样的持续集成、持续部署?

4682 次点击
所在节点    程序员
24 条回复
koalli
2018-06-11 17:23:45 +08:00
@mritd
我现在自己搭建的方案实际上非常接近,bitbucket + docker + daocloud,我理想中的流程是我一旦向 master 分支合并代码后,全自动测试+构建+部署,但是这个部署的目标可能是数量较大的服务器,我需要能控制单台服务器的配置参数,同时还需要一定的服务器监控管理。

@Loyalsoldier
Docker 可以从一定程度上来缓解这个问题,实际上就是由 Docker 来做集群资源管理,不再是直接连接对应的云主机去做操作了。我这个问题实际上包含了两个层面,一个是持续集成、持续部署的实施方案,以及多服务器的监控管理维护方案。
mritd
2018-06-11 20:33:32 +08:00
@koalli 对于较大量的服务器控制,那么在使用 docker 的情况下你应给使用编排工具,比如 swarm kubernetes 等,无论哪种都需要一些学习成本,当然我推荐 k8s 不过它的学习成本也更高



在完成了编排控制后,那么你就可以通过标准的编排工具的 cli 或者 自己对接 api 实现大批量快速的应用部署,滚动升级,回滚等动作


在此后你将可以处理你的 ci,不论是使用 jenkins 或者 gitlab ci 都可以在 build 完成后通过控制编排工具的方式进行对应操作,当然对于分支触发任务这种动作基本上哪个 ci 都支持


最后,如果你采用 gitlab ci 这篇文章可能对你有帮助 https://mritd.me/2017/11/28/ci-cd-gitlab-ci/ ,k8s 搭建等博客中也有点 😁
mritd
2018-06-11 20:34:46 +08:00
@koalli 还有资源监控等,上了集群以后有很多方案,还有分布式日志收集等等,具体的你可以查一下
koalli
2018-06-11 21:37:28 +08:00
@mritd
抱紧大佬,Swarm 我没玩过,之前在玩 Docker 的时候发现了 Kubernetes,然后跑到 IBM Bluemix 去试用过一段时间。我们公司的运维还在原始阶段(没准我还是理念领先的),我本身不是服务端开发,Docker 也好 Kubernetes 也好我都是自己翻官网文档研究,但是日常工作的时候没有使用场景,感觉相当有用,给好多朋友安利过。

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

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

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

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

© 2021 V2EX