Github的Action workflow提供了一个CI/CD的功能,默认情况下都有500分钟的免费运行时间。但是免费的机器编译速度略慢以及500分钟对于稍大一些的编译并不够用,于是Github也提供了self-hosted runner的选项。
简单的地说self-host runner有两种
- 直接在主机上运行。每次触发的运行环境互相不隔离
- 直接在k8s上动态的生成一个container,与宿主机完全隔离,每一次运行都是独立的环境
第一种的方法跑起来很简单,只要跟着Github tutorial上的命令粘贴复制即可。但是缺点是宿主机的发行版必须是Github支持的,比如Debian或者Ubuntu。对于ArchLinux爱好者不友好。
第二种方法显然跑一个k8s是个麻烦,于是我们可以简单用一个单机k3s来同样实现。
安装k3s
|
|
用Helm安装ARC (Github Action Runner Controller)
安装Helm
|
|
安装 actions-runner-system
|
|
创建一个至少具有repo权限的Token
|
|
创建一个配置文件
|
|
安装 runner set (即可以根据配置自动scale的一组runner)
|
|
这个时候回到Github repo的Settings->Actions->Runners 应该可以看到Runner Scale Set里有一个 k3s-runner-set 这就是跑在你k3s里可以自动scale的runner set。
这个时候在你的Github Action workflow yaml里指定 runs-on: k3s-runner-set 即可跑在你自己的runner上并且运行环境每一次都是干净隔离的,既不会影响宿主机也不会受前一次运行残留文件的影响。
参考连接
[Actions Runner Controller] https://docs.github.com/en/actions/concepts/runners/actions-runner-controller