我写了个假的 Gitlab Runner,可以运行自己的测试和编译自己,在每个星期四运行 job 还会有特殊效果(狗头) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
nanmu42
V2EX    分享创造

我写了个假的 Gitlab Runner,可以运行自己的测试和编译自己,在每个星期四运行 job 还会有特殊效果(狗头)

  •  1
     
  •   nanmu42
    nanmu42 2022-10-24 23:52:09 +08:00 2812 次点击
    这是一个创建于 1089 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Github 仓库

    https://github.com/nanmu42/tart

    摘要

    蛋挞是一个教学目的,非官方的 Gitlab Runner ,通过简明地实现 Gitlab Runner 功能的一个子集,展示 Gitlab Runner 的设计和实现方法。

    举个例子,蛋挞可以运行自己的 CI job ,运行自己的测试和编译自己

    特色:

    • 折腾;
    • 使用Firecracker/dev/kvm,让每个 job 在一个两秒内启动的虚拟机中运行,我目前没在公开资料里查到这么做的;
    • 代码量少,大概 2000 行实现了 Gitlab Runner 的核心功能:job 的获取、执行、环境隔离、日志和结果的上报;
    • 在每个星期四运行 job 会有特殊效果。

    只实现了核心功能,产物上传、service 这些功能是不支持的。换句话说,不要用于生产环境(真的会有人这么做吗)。

    使用方法

    蛋挞需要在可以访问/dev/kvm的 Linux 环境下运行:

    sudo setfacl -m u:${USER}:rw /dev/kvm 
    1. 从 release 页面下载蛋挞和 Firecracker 的二进制,并将它们置于$PATH
    2. 从 release 页面下载 RootFS 和 Linux 内核,把它们放到工作文件夹,比如~/tart
    3. 为 tart 创建的虚拟机预先配置网络,请参考rootfs/setup-tuntap.sh
    4. cd 到工作文件夹
    5. 注册 tart 为你项目的 Gitlab Runner:tart register --endpoint https://gitlab.example.com --token your_token_here > tart.toml
    6. 启动 tart:tart run
    7. 在 Gitlab 上触发 CI ,为了确保 job 会调度到 tart 上,你可能得禁用项目的 shared runner
    8. 观看 tart 工作(或者爆炸)

    编译方式

    make 

    产物在bin文件夹中。

    虚拟机的 RootFS 和 Linux 内核编译请参考rootfs文件夹。

    为啥叫蛋挞?

    我喜欢吃蛋挞。

    许可证

    MIT

    请自由享受和贡献开源。

    第三方项目许可证请参阅THIRD_PARTY_LICENSES.md.

    logo 的照片来自于 Ashley Byrd on Unsplash ,Gopher 在gopherize.me生成。

    11 条回复    2022-10-25 21:59:45 +08:00
    nanmu42
        1
    nanmu42  
    OP
       2022-10-25 08:54:49 +08:00 via iPhone
    自己打破一下零回复惨案…
    metrue
        2
    metrue  
       2022-10-25 09:32:20 +08:00   1
    我个人还蛮喜欢这样的项目的,GitHub 官方有一个 action 的 Runner https://github.com/actions/runner 不清楚是不是可以参考看看。
    nanmu42
        3
    nanmu42  
    OP
       2022-10-25 09:37:37 +08:00
    @metrue 感谢提供信息,我去看看。: D
    lazyrm
        4
    lazyrm  
       2022-10-25 09:49:26 +08:00   1
    周四肯德基呀?
    israinbow
        5
    israinbow  
       2022-10-25 09:58:20 +08:00 via Android   1
    tart/runner/crazy_thursday.go

    肯德基赞助了多少钱,我麦当劳给你双倍呃
    nanmu42
        6
    nanmu42  
    OP
       2022-10-25 10:13:04 +08:00
    @israinbow 哈哈哈哈,底裤都被你脱了。
    yin1999
        7
    yin1999  
       2022-10-25 10:58:55 +08:00   1
    OP 有实现虚拟机的文档啥的不,想学习一下这块的内容,之前有想过用容器去实现
    nanmu42
        8
    nanmu42  
    OP
       2022-10-25 11:06:20 +08:00   2
    @yin1999 如果是和 Firecracker 相关的,可以参考这里上手:

    https://github.com/nanmu42/tart/tree/master/rootfs

    我打算在近期写一篇上面内容的扩展版本。

    如果是“怎么实现虚拟机”,我就不是很清楚了。
    reorx
        9
    reorx  
       2022-10-25 19:16:03 +08:00 via iPhone   1
    卧槽,贼有意思的项目。可以脱离 GitLab 独立运行吗,比如提供自己的 API 供其他服务调用
    hawei
        10
    hawei  
       2022-10-25 21:28:29 +08:00 via iPhone   1
    6
    nanmu42
        11
    nanmu42  
    OP
       2022-10-25 21:59:45 +08:00 via iPhone
    @reorx 理论上可以,不过那样就不是 CI 啦,而是…虚拟机管理器?!
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2747 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 09:09 PVG 17:09 LAX 02:09 JFK 05:09
    Do have faith in what you're doing.
    ubao msn 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