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

2022-10-24 23:52:09 +08:00
 nanmu42

Github 仓库

https://github.com/nanmu42/tart

摘要

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

举个例子,蛋挞可以运行自己的 CI 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生成。

2256 次点击
所在节点    分享创造
11 条回复
nanmu42
2022-10-25 08:54:49 +08:00
自己打破一下零回复惨案…
metrue
2022-10-25 09:32:20 +08:00
我个人还蛮喜欢这样的项目的,GitHub 官方有一个 action 的 Runner https://github.com/actions/runner 不清楚是不是可以参考看看。
nanmu42
2022-10-25 09:37:37 +08:00
@metrue 感谢提供信息,我去看看。: D
lazyrm
2022-10-25 09:49:26 +08:00
周四肯德基呀?
israinbow
2022-10-25 09:58:20 +08:00
tart/runner/crazy_thursday.go

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

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

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

如果是“怎么实现虚拟机”,我就不是很清楚了。
reorx
2022-10-25 19:16:03 +08:00
卧槽,贼有意思的项目。可以脱离 GitLab 独立运行吗,比如提供自己的 API 供其他服务调用
hawei
2022-10-25 21:28:29 +08:00
6
nanmu42
2022-10-25 21:59:45 +08:00
@reorx 理论上可以,不过那样就不是 CI 啦,而是…虚拟机管理器?!

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

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

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

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

© 2021 V2EX