refactor(infra): 重构为 no-push 本地构建部署模式
Some checks failed
CI / quality-go (push) Failing after 3s
CI / quality-proto (push) Failing after 2s
CI / quality-ts (push) Failing after 47s
CI / deploy (push) Has been skipped

- 删除 6 个分散 workflow(ci-ts/ci-go/ci-proto/ci-py/docker/deploy)
- 合并为单个 ci.yml:3 个 quality job 并行 + deploy job 串行
- 全部使用官方镜像(node:22-alpine/golang:1.22-alpine/bufbuild/buf/docker:25-git)
- deploy job 用 DooD 模式挂载 /var/run/docker.sock
- docker-compose.deploy.yml 改用 build: 替代 image:(no-push)
- 新增 docker-compose.tools.yml 一次性预拉所有 CI 镜像
- 支持 workflow_dispatch 指定 commit_sha 回滚
- 更新 project_rules §15 与 cicd-runbook.md 为 no-push 模式
- 新增设计文档 docs/superpowers/specs/2026-07-08-cicd-no-push-local-build-design.md
This commit is contained in:
SpecialX
2026-07-08 17:12:57 +08:00
parent a1d7fcfd71
commit 68ddff1065
12 changed files with 613 additions and 812 deletions

View File

@@ -1,23 +1,27 @@
# 服务器部署用 Docker Compose
# 镜像来源:Gitea Container Registry (git.eazygame.cn/xiner/edu/<service>:<tag>)
# 服务器部署用 Docker Composeno-push 本地构建模式)
# 镜像来源:CI 容器内本地 docker build不推送到 registry
# 基础设施MySQL + Redis 已在服务器 Docker 中运行(不在此文件管理)
#
# 部署目录:/opt/edu/
# 部署命令CI 自动执行):
# IMAGE_TAG=latest docker compose pull && docker compose up -d
# docker compose up -d --build --remove-orphans
#
# 首次部署手动步骤:
# 1. sudo mkdir -p /opt/edu && sudo chown -R $USER:$USER /opt/edu
# 2. cp infra/docker-compose.deploy.yml /opt/edu/docker-compose.yml
# 3. cp infra/deploy.env.example /opt/edu/.env && 编辑填入生产密钥
# 4. docker login git.eazygame.cn -u <user> -p <token>
# 5. cd /opt/edu && IMAGE_TAG=latest docker compose up -d
# 4. docker compose up -d --build
#
# 注意compose 文件中的 build.context 路径相对于 /opt/edu/ 目录
# CI 在 deploy 步骤会先把仓库 checkout 到 /opt/edu/repo/,再 cp compose 文件到 /opt/edu/
name: edu
services:
api-gateway:
image: git.eazygame.cn/xiner/edu/api-gateway:${IMAGE_TAG:-latest}
build:
context: ./repo/services/api-gateway
dockerfile: Dockerfile
container_name: edu-api-gateway
restart: unless-stopped
environment:
@@ -48,7 +52,9 @@ services:
- edu-shared
classes:
image: git.eazygame.cn/xiner/edu/classes:${IMAGE_TAG:-latest}
build:
context: ./repo
dockerfile: services/classes/Dockerfile
container_name: edu-classes
restart: unless-stopped
environment:
@@ -70,7 +76,9 @@ services:
- edu-shared
teacher-portal:
image: git.eazygame.cn/xiner/edu/teacher-portal:${IMAGE_TAG:-latest}
build:
context: ./repo
dockerfile: apps/teacher-portal/Dockerfile
container_name: edu-teacher-portal
restart: unless-stopped
environment: