因为我自己的代码都是放在 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
欢迎大家试用 & 提问题~
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.