112 lines
3.5 KiB
Markdown
112 lines
3.5 KiB
Markdown
# act_runner 配置参考
|
||
|
||
工作流 `runs-on: ubuntu-latest`;`docker` job 额外使用 `catthehacker/ubuntu:act-22.04` 容器(含 Docker CLI)。
|
||
|
||
## 构建镜像必须:挂载 Docker Socket
|
||
|
||
`docker` job 需要访问宿主机 Docker 引擎。在 **runner 所在机器** 的 `config.yaml` 中配置:
|
||
|
||
```yaml
|
||
container:
|
||
options: -v /var/run/docker.sock:/var/run/docker.sock
|
||
valid_volumes:
|
||
- /var/run/docker.sock
|
||
```
|
||
|
||
推荐 job 镜像(含 Node + Docker CLI):
|
||
|
||
```yaml
|
||
runner:
|
||
labels:
|
||
- "ubuntu-latest:docker://catthehacker/ubuntu:act-22.04"
|
||
- "ubuntu-22.04:docker://catthehacker/ubuntu:act-22.04"
|
||
```
|
||
|
||
修改后 **重启 runner**(例如 `docker restart <runner容器>` 或重启 Gitea Runner 服务)。
|
||
|
||
## 验证
|
||
|
||
在 runner 宿主机执行:
|
||
|
||
```bash
|
||
docker info
|
||
ls -l /var/run/docker.sock
|
||
```
|
||
|
||
## 从零部署 runner(可选)
|
||
|
||
```bash
|
||
cd .gitea/act-runner
|
||
cp .env.example .env # 填入 Registration Token
|
||
docker compose up -d
|
||
```
|
||
|
||
## 常见错误
|
||
|
||
| 报错 | 原因 | 处理 |
|
||
|------|------|------|
|
||
| `docker: command not found` | job 容器无 Docker CLI | 工作流已指定 act 镜像;或 runner 改用 catthehacker/ubuntu |
|
||
| `Cannot connect to Docker daemon` | 未挂载 docker.sock | 按上文修改 config.yaml 并重启 runner |
|
||
| `node not in PATH` | job 镜像无 Node | 标签映射改用 catthehacker/ubuntu:act-22.04 |
|
||
| `http: server gave HTTP response to HTTPS client` 且 token 指向 `127.0.0.1` | **Gitea 容器 registry 配置/反代错误** | 见下文「Registry 登录失败」 |
|
||
|
||
## Registry 登录失败(127.0.0.1 / HTTP vs HTTPS)
|
||
|
||
若 `docker login git.rc707blog.top` 报错类似:
|
||
|
||
```text
|
||
Get "https://127.0.0.1:xxxxx/v2/token?...": http: server gave HTTP response to HTTPS client
|
||
```
|
||
|
||
说明 Gitea 把 **Docker 认证 token 地址** 配成了本机内网地址,CI runner 访问不到。需在 **Gitea 服务器** 修复,而非改 workflow。
|
||
|
||
### 1. 检查 `app.ini`
|
||
|
||
```ini
|
||
[server]
|
||
ROOT_URL = https://git.rc707blog.top/
|
||
; 内部通信用,勿写成对外域名
|
||
LOCAL_ROOT_URL = http://127.0.0.1:3000/
|
||
|
||
[packages]
|
||
ENABLED = true
|
||
```
|
||
|
||
`ROOT_URL` 必须与浏览器访问 Gitea 的 **HTTPS 外网地址** 完全一致(含末尾 `/`)。
|
||
|
||
### 2. 反向代理必须转发 `/v2` 并带上头
|
||
|
||
Container Registry 固定使用根路径 `/v2`。Nginx 示例:
|
||
|
||
```nginx
|
||
location / {
|
||
client_max_body_size 0;
|
||
proxy_pass http://127.0.0.1:3000;
|
||
proxy_set_header Host $host;
|
||
proxy_set_header X-Real-IP $remote_addr;
|
||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||
proxy_set_header X-Forwarded-Proto $scheme;
|
||
}
|
||
```
|
||
|
||
关键:`X-Forwarded-Proto: https` 和正确的 `Host: git.rc707blog.top`。
|
||
|
||
### 3. 在 runner 宿主机验证(修复后)
|
||
|
||
```bash
|
||
curl -I https://git.rc707blog.top/v2/
|
||
echo "$REGISTRY_TOKEN" | docker login git.rc707blog.top -u rose_cat707 --password-stdin
|
||
```
|
||
|
||
应返回 `401 Unauthorized`(正常,表示 registry 可达)且 `docker login` 显示 **Login Succeeded**。
|
||
|
||
参考:[Gitea 反向代理文档](https://docs.gitea.com/administration/reverse-proxies)
|
||
|
||
## Gitea Runner v0.6.x(个人 runner)
|
||
|
||
1. 找到 runner 的配置文件或环境(安装目录 / docker compose)
|
||
2. 确保 runner 进程能访问宿主机 `/var/run/docker.sock`
|
||
3. Runners 页标签含 `ubuntu-latest` 且状态 **空闲/在线**
|
||
|
||
若使用 Gitea 网页注册的个人 runner(docker 模式),通常需在 runner 启动参数或 `config.yaml` 里加入 socket 挂载,具体路径取决于你的安装方式。
|