因为我自己的代码都是放在 Github 上,所以 CICD 用的也都是 Github Actions 。但随着 AI 引入,Github Pro 送的 3000 分钟构建时间捉襟见肘,于是搞了这个项目,把 Github Actions 放在容器里,从而解决了 Github Action Runner 没办法放在用户级别共享的问题,可以给项目配置多个 Runner ,加速构建。
市面上现成的 self-hosted runner 方案要么是庞大的 K8s Operator (对于单机/小团队太重),要么就是简单的 Dockerfile 没有考虑持久化和多仓库。
所以我写并开源了这个项目:bestony/self-hosted-action-runner,目标是把 Runner 做成一个干净、免运维、可直接复制升级的容器。
做了哪些核心设计?
-
彻底解耦环境( DooD 模式): 通过挂载宿主机的
/var/run/docker.sock,工作流里的docker build、container:都能照常跑,宿主机除了 Docker 什么都不用装,绝不污染系统环境。 -
状态落卷持久化: 凭据和配置保存在独立卷中,容器随时重启、升级重建,都不需要重新去 GitHub 页面申请 Token 重注册。
-
二进制打补丁支持本地 Cache Server (最省心的一点): 官方 runner 默认会把第三方缓存环境变量覆盖掉。我们在构建镜像时给
Runner.Worker.dll打了一个小二进制补丁,让工作流不需要修改任何 YAML 代码,原生的actions/cache会自动走你内网搭建的 Cache Server ,局域网打满带宽拉取依赖,大幅缩短构建时间。 -
动态环境注入: 如果编译某些库缺系统依赖(比如
libmysqlclient-dev、libpq-dev),直接在.env里填RUNNER_EXTRA_APT_PACKAGES重启即可,启动时自动补齐,不用为了几个包天天重新 build 镜像。 -
一行交互式脚本(支持单机多仓库/多实例): 一台服务器可以混配多个 Org 和 Repo ,每个目标按需分配实例数(实例数即并发 Job 数)。
如何使用?
直接执行一行安装脚本就行,会自动检测当前系统环境。
curl -fsSL https://raw.githubusercontent.com/bestony/self-hosted-action-runner/main/install.sh | bash
项目地址
https://github.com/bestony/self-hosted-action-runner
欢迎大家试用 & 提问题~