[分享创造] 受够了 GitHub Actions 的额度限制与手装 Runner,我写了个容器化的一键自建方案(支持本地缓存加速)

3 天前
 xiqingongzi

因为我自己的代码都是放在 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 做成一个干净、免运维、可直接复制升级的容器。

做了哪些核心设计?

  1. 彻底解耦环境( DooD 模式): 通过挂载宿主机的 /var/run/docker.sock,工作流里的 docker build、container: 都能照常跑,宿主机除了 Docker 什么都不用装,绝不污染系统环境。

  2. 状态落卷持久化: 凭据和配置保存在独立卷中,容器随时重启、升级重建,都不需要重新去 GitHub 页面申请 Token 重注册。

  3. 二进制打补丁支持本地 Cache Server (最省心的一点): 官方 runner 默认会把第三方缓存环境变量覆盖掉。我们在构建镜像时给 Runner.Worker.dll 打了一个小二进制补丁,让工作流不需要修改任何 YAML 代码,原生的 actions/cache 会自动走你内网搭建的 Cache Server ,局域网打满带宽拉取依赖,大幅缩短构建时间。

  4. 动态环境注入: 如果编译某些库缺系统依赖(比如 libmysqlclient-dev、libpq-dev),直接在 .env 里填 RUNNER_EXTRA_APT_PACKAGES 重启即可,启动时自动补齐,不用为了几个包天天重新 build 镜像。

  5. 一行交互式脚本(支持单机多仓库/多实例): 一台服务器可以混配多个 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

欢迎大家试用 & 提问题~

652 次点击
所在节点    分享创造
2 条回复
ulpyxua
3 天前
我记得公共的 GitHub 项目的 action 不是不现实吗
xiqingongzi
2 天前
@ulpyxua #1 public repo 直接用 Github 官方的就好~

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

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

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

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

© 2021 V2EX