Skip to content

11.11 CI/CD 流水线 ​

概述

CI 门禁:后端 go vet + gofmt + build + test;前端 vue-tsc + eslint + 构建。CD:镜像/产物构建 → 部署 → 健康检查 → 冒烟。本节给出流水线模板与质量门建议。

CI 门禁(每次提交) ​

yaml
# 流水线示意(GitLab CI / GitHub Actions 通用)
stages: [check, build]

backend-check:
  stage: check
  script:
    - go build ./...
    - go vet ./...
    - test -z "$(gofmt -l .)"     # 格式检查(有输出即失败)
    - go test ./...               # sqlite 集成 + hooks MySQL 集成

frontend-check:
  stage: check
  working_dir: ui
  script:
    - pnpm install --frozen-lockfile
    - pnpm type:check             # vue-tsc
    - pnpm lint:eslint

构建与发布(tag/主干) ​

yaml
build-push:
  stage: build
  script:
    # 后端镜像(多阶段 Dockerfile,位于 docker/ 目录,上下文为项目根)
    - docker build -f docker/Dockerfile -t $REGISTRY/easygoadmin:$TAG .
    - docker push $REGISTRY/easygoadmin:$TAG
    # 前端产物
    - cd ui && pnpm build && rsync -az dist/ $SERVER:/opt/ui/dist/
  only: [main, tags]

deploy:
  stage: deploy
  script:
    - ssh $SERVER "docker pull $REGISTRY/easygoadmin:$TAG && cd docker && docker compose up -d easygoadmin"
    - ssh $SERVER "curl -sf http://127.0.0.1:8000/api/health"   # 健康检查失败即中止
    # 冒烟:登录 + 核心接口

质量门建议 ​

text
必过(阻断合并):
  go build / go vet / gofmt
  go test(sqlite 集成 + hooks MySQL 集成)
  vue-tsc / eslint

增强(告警或分级):
  黄金样本回归(hack/golden 接口响应比对——录制参数带 pageSize=3 等)
  pnpm audit / go vulncheck(依赖漏洞)
  覆盖率报告(逐步提升)

黄金样本回归(项目内置能力) ​

text
hack/golden/after*/  接口响应黄金样本(回归比对基线)
录制规范:带录制参数(pageSize=3 等)保证响应稳定可比
DIFF 归因三类:预期变更(更新样本)/ 非预期回归(修复)/ 环境差异(排除)
接入 CI:接口回归 job 对比新旧响应,非零差异阻断

发布流水线完整链 ​

text
提交 → CI 门禁 → 合并主干 → 构建镜像/产物 → 部署测试环境
  → 冒烟/回归 → 人工确认 → 生产发布(滚动/蓝绿)
  → health 验证 → 观察日志 → 完成/回滚

密钥管理 ​

text
CI 变量(加密变量/密钥库):
  REGISTRY 凭据 / 部署 SSH 密钥 / GF_JWT_SECRET 等生产密钥
原则:
  * 密钥不进代码仓库与镜像层
  * 生产密钥仅 deploy 阶段注入(check 阶段不可见)
  * 轮换有流程(改密钥 → 滚动重启 → 旧值失效窗口评估)

分支策略建议 ​

text
main        可发布主干(保护分支,CI 必过)
feature/*   功能分支 → MR → CI 门禁 → review 合并
hotfix/*    紧急修复 → 双人确认 → 快速通道发布
release/*   版本发布分支(打 tag 触发 CD)

流水线排障 ​

症状处理
gofmt 失败gofmt -w . 本地修复后提交
go test 失败集成测试依赖 MySQL/sqlite——CI 需起测试库服务
vue-tsc 失败类型错误本地 pnpm type:check 复现
部署后 health 失败流水线自动中止;查容器日志/配置注入
镜像过大多阶段构建 + alpine + .dockerignore

小蚂蚁云团队 · 提供技术支持