gitea 的 act_runner 需单独下载预编译二进制(如 v0.2.11 linux-amd64),重命名并赋执行权限;生成 config.yaml 后必须删除所有 docker:// 标签,仅保留 host 模式标签(如 "linux:host");注册时 --instance 必须为 gitea 实例完整 url(含协议和末尾斜杠),--token 须从仓库 settings → actions → runners 页面获取,且启动需指定 --config config.yaml,否则静默失败。

Gitea 的 Runner(act_runner)不是随 Gitea 一起安装的,必须单独下载、配置并注册到目标仓库——不注册就收不到任何 Action 任务,装了也等于没装。
怎么下载和准备 act_runner 二进制文件
官方只提供预编译二进制,不依赖系统包管理器:
- 去 https://www.php.cn/link/4fcf86be9106bf001cd5c131c72c5aae 找最新稳定版(如
v0.2.11),选linux-amd64(ARM 机器选对应后缀) - 用
wget下载后重命名为act_runner并加执行权限:chmod +x act_runner
- 建议创建专用目录存放,比如
/opt/act-runner,避免混在$PATH里造成冲突
为什么 config.yaml 里必须删掉所有 docker:// 标签
默认生成的配置会包含多个 ubuntu-xx.x:docker://... 标签,这会让 act_runner 尝试拉镜像运行 job——但你没装 Docker 或不想用容器时,它会卡住或报错 failed to create container。
正确做法是只保留 host 执行模式:
- 运行
./act_runner generate-config > config.yaml - 编辑
config.yaml,把labels:下所有带docker://的行全删掉 - 只留一行:
labels: - "ubuntu:host"
(Linux 就写linux:host,Windows 写windows:host)
注册失败常见原因:URL、token、网络三者必须严丝合缝
注册命令本身成功不代表 runner 能干活,后续 pipeline 一直 pending 基本就是这里错了:
-
--instance必须填 Gitea 实例完整地址,比如https://git.example.com/或http://192.168.1.100:3000/——不能少末尾斜杠,也不能是项目页或 API 地址 -
--token必须从具体仓库的 Settings → Actions → Runners → New runner 页面复制,不是全局 token,也不是 API key - 如果 Gitea 启用了 HTTPS 但证书不被信任(比如自签),注册时加
--tls-ca-file=""临时跳过校验;否则会卡在x509: certificate signed by unknown authority
启动后没反应?先确认这三件事
act_runner daemon 启动后没有日志输出、网页里看不到 runner 上线,大概率是以下之一:
- 没用
--config config.yaml指定配置文件,它默认找当前目录下的config.yaml,路径错就静默失败 - 配置里
runner.name和已注册的重名了,Gitea 会拒绝重复注册(网页里能看到同名 runner 状态为offline) - 防火墙或 SELinux 阻断了出站连接:检查
curl -v https://git.example.com/api/v1/version是否通,不通就先调通网络
真正跑起来后,act_runner 默认以当前用户身份执行 job,所以该用户得有权限读写仓库代码、调用 git、node、make 等工具——这点比 GitLab Runner 的 shell executor 更“裸”,也更容易因环境缺失失败。











