82 lines
3.5 KiB
Markdown
82 lines
3.5 KiB
Markdown
# Gitea Actions CI 模板(Go + Vue)
|
||
|
||
复制整个 `.gitea/` 目录到新仓库即可启用 CI:**可选 go test** + **Docker 构建/推送**(Go 编译与 Vue 构建在 Dockerfile 内完成)。
|
||
|
||
## 项目约定
|
||
|
||
| 路径 | 说明 |
|
||
|------|------|
|
||
| `go.mod` | 仓库根目录 |
|
||
| `Dockerfile` | 仓库根目录,多阶段构建(含前端 `web/`) |
|
||
| `web/` | 可选;由 Dockerfile 内 `npm run build` 处理,CI 不再单独构建 |
|
||
|
||
## 一次性配置
|
||
|
||
1. **Runner**:部署 act_runner,标签含 `ubuntu-latest`,并挂载 `docker.sock`(见 [act-runner/README.md](act-runner/README.md))。
|
||
2. **Secret**:仓库 Settings → Actions → Secrets,添加 `REGISTRY_TOKEN`(PAT,`write:package` 权限)。
|
||
3. **Variable(推荐)**:若 runner 与 Gitea 同机、或 `gitea.server_url` 为内网地址,必须设置 `REGISTRY=你的公网域名`(如 `git.example.com`,**不要**填 `172.17.0.1:13827`)。
|
||
4. **Gitea Registry**:服务端 `[packages] ENABLED = true`,`ROOT_URL` 正确;穿透场景建议 `PUBLIC_URL_DETECTION = never`(Gitea 1.26+)。
|
||
|
||
`REGISTRY` 未设置时,会从 `GITEA_ROOT_URL` 或 `gitea.server_url` 推断;均为内网地址时 workflow 会提前失败并提示。
|
||
|
||
## 可选 Variables
|
||
|
||
仓库 Settings → Actions → Variables(留空则用默认值):
|
||
|
||
| 变量 | 默认 | 说明 |
|
||
|------|------|------|
|
||
| `REGISTRY` | 见下方推断顺序 | **公网** Registry 主机名,如 `git.example.com`(勿用内网 IP:13827) |
|
||
| `GITEA_ROOT_URL` | (空) | 当 `gitea.server_url` 为内网时,可设 `https://git.example.com/` |
|
||
| `IMAGE_NAME` | 仓库名小写 | 镜像名,非 owner/repo 全路径 |
|
||
| `DOCKERFILE` | `Dockerfile` | Dockerfile 路径 |
|
||
| `DOCKER_PLATFORMS` | `linux/amd64,linux/arm64` | push 时 buildx 平台 |
|
||
| `GO_TEST_SCOPE` | `./...` | `go test` 包路径 |
|
||
| `RUN_GO_TEST` | (空,即运行) | 设 `false` 跳过 go test,仅 Docker 构建 |
|
||
| `DOCKER_IMAGE_PREFIX` | `1panel` | 基础镜像前缀;可选 `hub` / `daocloud` |
|
||
| `GOPROXY` | `https://goproxy.cn,direct` | Go 模块代理 |
|
||
| `GOSUMDB` | `sum.golang.google.cn` | Go checksum 数据库 |
|
||
|
||
## 触发与镜像 tag
|
||
|
||
- **pull_request**:go test(可关)+ 单架构 `docker build` 验证(不推送)
|
||
- **push main/master**:go test + 多架构构建并推送 `:latest`、`:sha-xxxxxxx`
|
||
- **push tag v\***:额外推送 `:v1.2.3` 等
|
||
|
||
示例(仓库 `rose_cat707/Prism`,Gitea 在 `git.example.com`):
|
||
|
||
```text
|
||
git.example.com/rose_cat707/prism:latest
|
||
git.example.com/rose_cat707/prism:sha-35b3b48
|
||
```
|
||
|
||
## 目录结构
|
||
|
||
```text
|
||
.gitea/
|
||
├── README.md # 本文件
|
||
├── workflows/
|
||
│ └── ci.yml # 主工作流
|
||
└── act-runner/ # runner 部署参考(可选)
|
||
├── README.md
|
||
├── config.yaml
|
||
├── docker-compose.yml
|
||
└── .env.example
|
||
```
|
||
|
||
## 本地验证 Registry
|
||
|
||
```bash
|
||
host=$(echo "https://你的-gitea-地址/" | sed -e 's|^https://||' -e 's|/.*||')
|
||
curl -s -D - "https://${host}/v2/" -o /dev/null | grep -i www-authenticate
|
||
echo "$REGISTRY_TOKEN" | docker login "$host" -u 你的用户名 --password-stdin
|
||
```
|
||
|
||
`realm` 应指向公网 Gitea 域名,而非 `127.0.0.1`。
|
||
|
||
## 常见 Registry 错误
|
||
|
||
| 报错 | 原因 | 处理 |
|
||
|------|------|------|
|
||
| `Get "https://172.17.0.1:13827/v2/"` HTTP/HTTPS | Variable `REGISTRY` 或 `gitea.server_url` 为内网地址 | 设 `REGISTRY=git.example.com` |
|
||
| token 指向 `127.0.0.1` | Gitea `realm` 配置错误 | `PUBLIC_URL_DETECTION=never` + 正确 `ROOT_URL` |
|