关于公司自动化部署的设想

2019-07-03 11:40:37 +08:00
 avalon8
小弟公司这几天在做 devOps,让我负责自动部署这块,小弟也看了很多资料,提出了一个设想:

1、开发人员 Merge 代码后 GitLab 触发 jenkins
2、jenkins 根据每个应用设置对应的 job,根据每个 module 下的 dockefile 将应用打成 docker 镜像并 push 到 nexus 镜像仓库。
3、使用 rancher 从 docker 仓库拉取镜像并部署。

小弟有几个疑问:
1、上述流程是否可以实现
2、GitLab 触发 jenkins 持续集成的时候需不需要先执行 maven 命令打包在打 docker 镜像
3、rancher 能否设置镜像仓库上传了新的镜像后自动拉取 docker 镜像。
4、关于 docker 镜像的构建能否这样:
( 1 )先构建好每个 module 的 tomcat 镜像 放到私有仓库
( 2 )每次 jenkins 构建先从仓库拉取对应 tomca 镜像,再把 war 包打进去然后再 build 一次镜像
( 3 )推送到私有仓库
7885 次点击
所在节点    DevOps
27 条回复
anubu
2019-07-03 12:16:15 +08:00
个人经验:
1. 可以实现,基本流程都差不多,难点在于具体各个环节的调试落地;
2. 编译构建步骤是不可缺少的,无非是你选择在 jenkins 环境中出 war 包还是 Dockerfile 多阶段构建出 war 包,这取决于你的构建环境是什么,docker 镜像只是对 war 的一种封装。
3. 不清楚 rancher 是否可以自动拉取最新镜像,如果部署环境是 docker 的话可以参考 https://github.com/containrrr/watchtower
4. tomcat 作为基础镜像,出 war 包后直接 build 一个新的镜像即可。
avalon8
2019-07-03 13:16:31 +08:00
@anubu 我想着是用 jenkins 打成 war 包再把 war 包复制到 tomcat 中再打成镜像 push 到仓库
LicV587
2019-07-03 13:24:03 +08:00
@avalon8 为什么要这么复杂?直接 Springboot,内嵌 tomcat,jenkins 直接打 jar 包,在运行 docker build 一个镜像
Defned
2019-07-03 13:24:18 +08:00
刚刚在公司落地,我用了 drone
victorywangzhcn
2019-07-03 13:26:48 +08:00
个人经验 2:
1. 可以实现,不过 Merge 这需要看看开发流程以及回收 Master 权限
2. 我们以前的流程是 Git --> Jenkins --> Unit Test --> Deploy snapshot to Nexus --> Deploy Daily
3. 可以采用 Jenkins 的 Pipeline 完成这个流程
4. 这里有俩选择,一是基础镜像(基本不动)+ War 跑新的 Image,二是类似我们之前的方案,只有一个基础镜像,每次 CI 流程的时候打 snapshot 包,基础镜像里负责根据启动参数拉取对应的包并解压执行(这里也有助于统一运维),所以每次只需要重启,他就能自动拉包
wangking
2019-07-03 13:27:18 +08:00
可以实现,jenkins pipeline 一条龙的事,加上 k8s 就更容易了
MuscleOf2016
2019-07-03 13:33:27 +08:00
可以实现的,自动化中间的这些流程,可以先自己人工跑一遍,jenkins 最后作为一个自动工具将这些流程都串起来就可以了。人工能做都,基本自动工具都可以做。
MuscleOf2016
2019-07-03 13:33:51 +08:00
@MuscleOf2016 不过简单都直接 gitlab-runner 配流水线就好了嘛
lauix
2019-07-03 13:34:57 +08:00
已经运行了一个多月 也用 rancher 整体技术实现差不多。
avalon8
2019-07-03 13:37:04 +08:00
@LicV587 应用架构是 springMvc+dubbo
luozic
2019-07-03 13:38:04 +08:00
数据库需要相应的同步工具,否则也就是应用的自动化部署。
wangxiaoaer
2019-07-03 13:53:40 +08:00
我也在关注这个东西,其实开发端 从 git 到 ci 到 jar/war/docker image 都没有问题。

我们纠结的是打包结果更新好之后如何推送到服务器,docker 的话可以直接 push,jar 或者 war 就不好弄,我们目前是搭建 ftp 上传,但是总感觉不太方便。

其次,更新包上传到云端后,服务器如何得知应用有更新,我们目前是做了个小应用,定时访问云端,然后下载、重启,同样感觉这个不是很方便。

有没有好的方案(成熟的)?对了,个别服务器是 windows 的。
avalon8
2019-07-03 14:03:32 +08:00
@wangxiaoaer 推送到服务器 jenkins 就可以做到啊,我们现在就可以实现在 jenkins 直接打包然后测试站点直接生效
akira
2019-07-03 14:07:11 +08:00
@avalon8 publish over ssh ? 那功能在内网内用不错

如果是用阿里云或者腾讯云的话 他们有提供 cicd 的方案了,给钱就行
mikuazusa
2019-07-03 14:12:00 +08:00
jenkins 全部能轻松实现
KuroNekoFan
2019-07-03 14:34:31 +08:00
gitlab ci 也可以
br00k
2019-07-03 14:48:28 +08:00
Rancher 本身就有 Pipeline 了,应该可以满足楼主的要求。
avalon8
2019-07-03 15:15:23 +08:00
@br00k 十分感谢
wuhang89
2019-07-03 15:22:37 +08:00
我就是这么做的。
Takamine
2019-07-03 15:23:52 +08:00
话说国内好像用 Travis CI 的确实不多诶。

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

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

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

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

© 2021 V2EX