Gitea Actions CI 模板(Go + Vue)
复制整个 .gitea/ 目录到新仓库即可启用 CI:Go 测试 + 多架构 Docker 镜像推送到 Gitea Container Registry。
项目约定
| 路径 | 说明 |
|---|---|
go.mod |
仓库根目录,用于读取 Go 版本并跑测试 |
Dockerfile |
仓库根目录,docker job 构建镜像(Vue 构建通常在此多阶段完成) |
web/ |
可选;若存在 web/package.json,test job 会尝试 npm run build |
一次性配置
- Runner:部署 act_runner,标签含
ubuntu-latest,并挂载docker.sock(见 act-runner/README.md)。 - Secret:仓库 Settings → Actions → Secrets,添加
REGISTRY_TOKEN(PAT,write:package权限)。 - Variable(推荐):若 runner 与 Gitea 同机、或
gitea.server_url为内网地址,必须设置REGISTRY=你的公网域名(如git.example.com,不要填172.17.0.1:13827)。 - 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 |
buildx 平台 |
WEB_DIR |
web |
前端目录 |
GO_TEST_SCOPE |
./... |
go test 包路径 |
DOCKER_IMAGE_PREFIX |
(空,用 Docker Hub) | 基础镜像前缀,如 docker.m.daocloud.io/library/ |
NODE_VERSION |
20.19.0 |
前端构建用 Node(Vite 8 需 20.19+) |
GOPROXY |
https://goproxy.cn,direct |
Go 模块代理 |
GOSUMDB |
sum.golang.google.cn |
Go checksum 数据库 |
触发与镜像 tag
- pull_request:仅
testjob - push main/master:
test+ 推送{registry}/{owner}/{image}:latest与:sha-xxxxxxx - push tag v*:额外推送
:v1.2.3等
示例(仓库 rose_cat707/Prism,Gitea 在 git.example.com):
git.example.com/rose_cat707/prism:latest
git.example.com/rose_cat707/prism:sha-35b3b48
目录结构
.gitea/
├── README.md # 本文件
├── workflows/
│ └── ci.yml # 主工作流
└── act-runner/ # runner 部署参考(可选)
├── README.md
├── config.yaml
├── docker-compose.yml
└── .env.example
本地验证 Registry
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 |