关于微服务项目的 GitLab CI 如何写?

2021-12-03 15:03:18 +08:00
 xyqhkr
一个 Menorepo 项目(单仓库多目录微服务),希望使用 gitlab-ci 实现自动生成发布镜像。
以前一个项目只有一个镜像的时候,直接一条流水线下来,生成镜像发布即可。
现在这个 Menorepo 项目里,有十个微服务(后期有可能继续增加),每个微服务生成一个镜像。在本地调试的时候,使用的 Makefile 循环生成镜像,现在想要 gitlab-ci 自动生成,肯定不能写十个流水线,想要使用 ci 直接执行 make ,但是发布镜像使用的 kaniko ,该镜像中不支持 make 命令。这种微服务项目该怎么写 gitlab-ci ?
2072 次点击
所在节点    程序员
17 条回复
BeijingBaby
2021-12-03 15:04:25 +08:00
不支持 make ,支持 sh 不 ?
kiwi95
2021-12-03 15:06:43 +08:00
都 mono repo 了为啥不用一个镜像,运行时做下区分,不同服务走不同逻辑就可以了
defunct9
2021-12-03 15:13:41 +08:00
onedev
xyqhkr
2021-12-03 15:14:33 +08:00
@kiwi95 这个问题不讨论,微服务化逐步拆分中。
xyqhkr
2021-12-03 15:14:54 +08:00
@BeijingBaby 是个方法,
clf
2021-12-03 15:17:03 +08:00
gitlab-runner 运行的环境下该怎么打包就怎么写呗。和镜像环境没关系,你可以外面( runner 所在环境)编译完后再打包到 docker 运行环境的镜像里。
basefas
2021-12-03 15:29:06 +08:00
规定 tag 规则,然后通过正则匹配 tag 触发
agui2200
2021-12-03 15:33:56 +08:00
都是先编译完再传镜像啊,万一镜像有问题,你还有 build 结果,gitlab ci 不就支持多个阶段么
leopod1995
2021-12-03 15:34:30 +08:00
和 7#的原理一样, 根据 commmit 写正则匹配微服务执行构建就行
SingeeKing
2021-12-04 15:34:10 +08:00
是 Mono Repo 而不是 meno
xyqhkr
2021-12-06 11:45:48 +08:00
@clf 这个项目有十个微服务了,ci 里写十遍生成镜像,有点傻。并且每增加一个服务,都要在 ci 里增加一份流程。不太像合适的做法。
xyqhkr
2021-12-06 11:46:34 +08:00
@basefas 这个是触发单个服务的更新,我主要是问的全量更新的时候,十个服务要在 ci 里写十遍吗?
xyqhkr
2021-12-06 11:46:53 +08:00
@SingeeKing 感谢指正
xyqhkr
2021-12-06 11:47:39 +08:00
@BeijingBaby 编译镜像使用的 kaniko executor ,不支持 sh
clf
2021-12-06 14:14:34 +08:00
@xyqhkr #11 ci 脚本里自己读取一下服务,或者采用配置文件的方式决定发布哪些服务,然后执行打包就行了,又不需要把同样的东西复制十多个。
另外,gitlab-ci 是可以监听代码变化决定触发的,你可以做到 A 服务相关代码变动,执行打包 A 服务 CI……监听到 release 分支创建了 version tag ,再全量打包到 release version tag 上。

(一般情况下微服务项目更多的是单仓库单服务节点的模式)

我看了一下 kaniko executor ,这玩意主要还是执行 Dockerfile 的打包逻辑,它是用来构建镜像的,不是必须要在里面编译代码,你可以在外部编译完后复制进容器里,也可以在容器里执行环境安装脚本后再编译。
basefas
2021-12-07 09:29:57 +08:00
@xyqhkr #12 全量一样,定一个一个 tag ,然后匹配,Gitlab 的话,应该只能这么用
xyqhkr
2021-12-08 12:30:33 +08:00
@clf (一般情况下微服务项目更多的是单仓库单服务节点的模式) 这句话不太对哦。现在一般都是 Mono Repo 模式。

我提 kaniko executor 是因为要在 ci 步骤里写 Dockerfile 打包步骤,编译阶段在这之前已经处理完成。你没提在这个阶段,如何实现全量打包 10 个微服务的问题。因为使用 kaniko executor 必须基于 kaniko 镜像,该镜像对 shell 支持不友好。除非我写 10 次 kaniko executor ,不然想不到 如何打包多个镜像。

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

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

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

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

© 2021 V2EX