请教大佬, Golang 的 CI 如何按代码变更构建某个镜像? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
istomyang
V2EX    Go 编程语言

请教大佬, Golang 的 CI 如何按代码变更构建某个镜像?

div id="topic_1028507_votes" class="votes">
  •  
  •   istomyang 2024-03-31 10:43:11 +08:00 2351 次点击
    这是一个创建于 558 天前的主题,其中的信息可能已经有所发展或是发生改变。

    因为 Golang 项目可以包含多个二进制文件,那 CI 构建就需要考虑仅构建代码变更的镜像。

    目前解决方案根据 commit scope 来定义影响范围,但难点在于共享包修改的情况,偷懒的话可以定义粗范围,比如某个共享包影响所有或者某个大范围的镜像。

    我想问你们团队一般都是怎么解决的?感谢!

    第 1 条附言    2024-04-29 14:43:18 +08:00
    感谢大佬!

    我们最终选定 scope 的方式,制定了 scope 文档定义影响范围。问题的难点在 共享包 的影响范围界定上,目前我们偷懒默认影响全部领域的构建,但是也提供了指定。
    8 条回复    2024-04-01 20:15:35 +08:00
    just1
        1
    just1  
       2024-03-31 10:48:35 +08:00   1
    用 bazel
    SethShi
        2
    SethShi  
       2024-03-31 13:27:40 +08:00
    分支法, 每个分支对应一个应用
    文件夹法, 写 ci 判断文件夹变动了才去构建这个目录下的镜像
    app/
    /service1
    /service2
    GenericT
        3
    GenericT  
       2024-03-31 13:59:57 +08:00 via Android
    go/callgraph 从各个入口遍历,收集所有涉及到的文件,然后和 git diff 的结果再做一个 diff 就知道了。
    不过我觉得有点多余,go 编译已经挺快的了,图啥,又不是 C++编译一个小时
    mshadow
        4
    mshadow  
       2024-03-31 14:06:27 +08:00 via Android
    把多个二进制改成一个二进制的多个子命令,可以用 cobra 实现。比如,你之前是 编译出来 cli_a 、cli_b 、cli_c 三个二进制,现在用 cobra 改成一个程序入口,cli a, cli b, cli c 三个子命令,这样只有一个二进制,并且公用代码相当于只编译了一次
    lysShub
        5
    lysShub  
       2024-03-31 17:48:26 +08:00
    为啥有多个二进制?不能合在一起吗?
    xhd2015
        6
    xhd2015  
       2024-03-31 20:51:22 +08:00 via iPhone
    @lysShub 确实,源代码可以分开,但是集成最好做在一起,提供一个统一的工具界面
    uliah
        7
    uliah  
       2024-04-01 12:10:52 +08:00
    我们增加了优先级 P (比如 com 和 app 俩个分类), 确认 commit scope , 根据 P 定义顺序,P.com 全部完成之后执行 P.app 部分 。 这方法比较通用,不仅是在 Golang 项目。
    just1
        8
    just1  
       2024-04-01 20:15:35 +08:00 via Android
    针对大的 monorepo ,就一个方法,通过依赖图反查改动 package 的影响范围。但这个事情还是挺麻烦的,所以用 bazel 吧嘿嘿嘿,它设计思路就是这个。除了学习成本有点高,用了你就会喜欢上的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3010 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 13:27 PVG 21:27 LAX 06:27 JFK 09:27
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86