V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
nanmu42
V2EX  ›  分享创造

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

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

    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   ·   实用小工具   ·   2901 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 06:37 · PVG 14:37 · LAX 22:37 · JFK 01:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.