因为 Golang 项目可以包含多个二进制文件,那 CI 构建就需要考虑仅构建代码变更的镜像。
目前解决方案根据 commit scope 来定义影响范围,但难点在于共享包修改的情况,偷懒的话可以定义粗范围,比如某个共享包影响所有或者某个大范围的镜像。
我想问你们团队一般都是怎么解决的?感谢!
1
just1 270 天前 1
用 bazel
|
2
seth19960929 270 天前
分支法, 每个分支对应一个应用
文件夹法, 写 ci 判断文件夹变动了才去构建这个目录下的镜像 app/ /service1 /service2 |
3
GenericT 270 天前 via Android
go/callgraph 从各个入口遍历,收集所有涉及到的文件,然后和 git diff 的结果再做一个 diff 就知道了。
不过我觉得有点多余,go 编译已经挺快的了,图啥,又不是 C++编译一个小时 |
4
mshadow 270 天前 via Android
把多个二进制改成一个二进制的多个子命令,可以用 cobra 实现。比如,你之前是 编译出来 cli_a 、cli_b 、cli_c 三个二进制,现在用 cobra 改成一个程序入口,cli a, cli b, cli c 三个子命令,这样只有一个二进制,并且公用代码相当于只编译了一次
|
5
lysShub 270 天前
为啥有多个二进制?不能合在一起吗?
|
7
uliah 269 天前
|
8
just1 269 天前 via Android
针对大的 monorepo ,就一个方法,通过依赖图反查改动 package 的影响范围。但这个事情还是挺麻烦的,所以用 bazel 吧嘿嘿嘿,它设计思路就是这个。除了学习成本有点高,用了你就会喜欢上的
|