采用 CI/CD 方式部署的服务,如何私有化部署到客户内网

2021-06-21 10:05:02 +08:00
 jackleeforce3615

我们有一个产品采用脚手架 full-stack-fastapi-postgresql 开发,在内部部署的时候都是用 gitlab + gitlab runner + docker swarm 部署。现在有需求要部署到客户内网,一下子傻眼了,难道要在客户内容搭建一套 gitlab ci 环境 然后把代码推送到客户的gitlab 来进行部署么?

4470 次点击
所在节点    程序员
32 条回复
zlink
2021-06-21 10:08:18 +08:00
vpn ?
youyi1996
2021-06-21 10:09:46 +08:00
都上 docker 了为啥不导出镜像拷贝到客户那边?
killva4624
2021-06-21 10:12:58 +08:00
- 客户端内网服务器如果可以连接外网,可以考虑做一套或者找现成的轮子,实现自动轮询最新配置+自动变更(比如 Azure IoT );
killva4624
2021-06-21 10:14:37 +08:00
- 如果客户端不能连接外网,那就找客户要一个连接外网的内网的服务器做中转,从这个服务器上连接 CI 和客户内网的部署环节,比如 Rundeck
Actrace
2021-06-21 10:20:20 +08:00
@killva4624 😂,有点腿裤子放屁的感觉。
liuxu
2021-06-21 10:21:29 +08:00
不用,这个方案我搞过,gitlab runner 有个 shell 模式,runner 在服务器内网安装,原理其实是 runner 定时每秒请求 gitlab 获取 event 执行 ci,只要内网有机器能访问到 gitlab 就行
wengych
2021-06-21 10:22:36 +08:00
@liuxu 还要依赖于 registry...
jackleeforce3615
2021-06-21 10:27:53 +08:00
@zlink 这个估计悬,可能还得升级公司基础设施( VPN 网速不够)

@youyi1996 感谢回复,这样镜像导出来好像没办法用 `docker swarm` 部署。

@killva4624 感谢回复,你说的这两个方案 我消化理解一下。
jackleeforce3615
2021-06-21 10:30:17 +08:00
@wengych 是 我们内网部署的时候有一台 `artifactory `,`gitlab-ci.yaml` 里面执行脚本把镜像 push 到 `artifactory`上面。然后执行 docker-swarm 命令拉取镜像部署。 现在看来感觉这个 registry 要放到外网。
jackleeforce3615
2021-06-21 10:31:47 +08:00
@liuxu 你的意思是在客户内网安装 `runner`, 只要客户内网 `runner ` 可以访问到我公司的 `gitlab` 就可以是把?
jackleeforce3615
2021-06-21 10:32:08 +08:00
回复怎么不能支持 markdown .
liuxu
2021-06-21 10:33:18 +08:00
securityCoding
2021-06-21 10:42:35 +08:00
我们上了 k8s+helm ,helm 防火墙开放白名单
流程标准化后没那么累
defunct9
2021-06-21 10:53:45 +08:00
开 ssh,让我上去看看。(刚弄完一套 gitlab + 2 处 git + harbor + argocd,网络一样复杂,穿越了 3 个机房)
pelloz
2021-06-21 10:54:35 +08:00
我问一下,客户服务器没有 k8s 或者 docker 的环境,也没有相应的运维资源去支持,你们都是怎么解决私有化部署的?
bthulu
2021-06-21 10:59:53 +08:00
@liuxu 内网是不能访问外网的, 根本就连不到 gitlab
clf
2021-06-21 11:02:00 +08:00
runner 在内网就行了,runner 开权限连 gitlab 就 OK 。runner 就是实际打包的机器。

镜像要不要推送到镜像仓库看你们需求。
killva4624
2021-06-21 11:07:26 +08:00
@Actrace 去年刚做过一个类似的场景,国内某大型企业,内网准入极其苛刻,前期研发手动 VPN 变更,后期为了大规模部署真是绞尽脑汁……
ljhrot
2021-06-21 11:16:14 +08:00
建议放弃在内网折腾 CI/CD 的想法,大规模服务可以尝试使用 ansible 部署,就是包括基础环境和服务应用,做稳定版本的部署和升级就行了
wengych
2021-06-21 11:18:48 +08:00
代码交付还是二进制交付,代码交付可以做 repo mirror,然后客户方面内网部署一套独立的 gitlab 和 cicd
如果是二进制交付,做一个白名单入口把 repository 开放给客户,客户主机可以用 puppet/ansible 之类的工具做配置管理。

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

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

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

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

© 2021 V2EX