English | 中文
蛋挞是一个教学目的,非官方的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
- 从release页面下载蛋挞和Firecracker的二进制,并将它们置于
$PATH
- 从release页面下载RootFS和Linux内核,把它们放到工作文件夹,比如
~/tart
- 为tart创建的虚拟机预先配置网络,请参考
rootfs/setup-tuntap.sh
- cd到工作文件夹
- 注册tart为你项目的Gitlab Runner:
tart register --endpoint https://gitlab.example.com --token your_token_here > tart.toml
- 启动tart:
tart run
- 在Gitlab上触发CI,为了确保job会调度到tart上,你可能得禁用项目的shared runner
- 观看tart工作(或者爆炸)
make
产物在bin
文件夹中。
虚拟机的RootFS和Linux内核编译请参考rootfs
文件夹。
我喜欢吃蛋挞。
MIT
请自由享受和贡献开源。
第三方项目许可证请参阅THIRD_PARTY_LICENSES.md
.
logo的照片来自于Ashley Byrd on Unsplash,Gopher在gopherize.me生成。