# 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` |