从立项到上线的标准流程

面向团队真实场景的端到端讲解:项目初始化、协作开发、分支策略、调试、进度管理与 CI/CD 构建。Claude Code 作为团队成员融入每一环节。

目录

  1. 总览:完整流程树状图
  2. 项目建立与初始化
  3. 敏捷节奏与任务管理
  4. 分支策略与协作开发
  5. Merge Request 与代码评审
  6. Claude Code 工作流嵌入
  7. 调试与缺陷管理
  8. CI/CD 构建与部署
  9. 发布与回滚
  10. 团队上手 Checklist

1总览:完整流程树状图

一张图看清楚从产品想法到生产环境之间发生了什么。每一个分叉代表团队的一次决策点。

flowchart TD A([📌 产品想法 / 需求]) --> B[GitLab Issue 立项] B --> C[迭代规划 Sprint Planning] C --> D{任务分配} D --> E1[开发者 A] D --> E2[开发者 B] D --> E3[🤖 Claude Code] E1 --> F[创建 feature 分支] E2 --> F E3 --> F F --> G[本地开发 + 自测] G --> H[push 到远程] H --> I[发起 Merge Request] I --> J{CI 流水线} J -->|❌ 失败| G J -->|✅ 通过| K[Code Review] K -->|需修改| G K -->|通过| L[合并到 develop] L --> M[集成测试环境] M --> N{Sprint 结束?} N -->|否| C N -->|是| O[合并到 main] O --> P[打 Tag / Release] P --> Q[CD 部署生产] Q --> R([🚀 上线]) R --> S[监控 + Bug 反馈] S -.->|新 Issue| B classDef start fill:#fc6d26,stroke:#fc6d26,color:#fff classDef decision fill:#1c232c,stroke:#d29922,color:#d29922 classDef ci fill:#1c232c,stroke:#58a6ff,color:#58a6ff classDef done fill:#3fb950,stroke:#3fb950,color:#fff classDef claude fill:#bc8cff,stroke:#bc8cff,color:#fff class A,R start class D,J,K,N decision class J,M,Q ci class E3 claude class P,O done
核心思想: 主分支 main 永远可发布,所有改动通过 feature 分支 + Merge Request 进入。CI 自动卡关,人工评审守门,Claude Code 在每个环节加速但不绕过流程。

2项目建立与初始化

2.1 在 GitLab 上创建项目

1

创建 Group + Project

在 GitLab 上新建 Group(团队/产品线),再在 Group 下创建 Project。Group 层级用于权限继承和成员管理。

2

初始化仓库与 README

勾选「Initialize with README」+ 选择 .gitignore 模板 + 选择 license。提交首个 commit 作为 baseline。

3

本地克隆并准备环境

git clone git@gitlab.com:your-group/your-project.git
cd your-project
# 配置项目级 Git 身份(推荐)
git config user.name "Your Name"
git config user.email "you@company.com"

2.2 必备配置文件

文件作用
.gitignore过滤 IDE/构建产物/secret
.gitlab-ci.ymlCI/CD 流水线定义
README.md项目说明、本地起步、架构图
CONTRIBUTING.md分支规则、commit 规范、MR 模板
CODEOWNERS按目录指定默认评审人,含 @claude-bot
CLAUDE.mdClaude Code 项目级指令、约束、风格

2.3 权限模型

Maintainer

核心成员:管理分支保护、CI 变量、发布。

Developer

日常成员:可推送 feature 分支、发起 MR。

Reporter

QA / PM:可看 Issue 与 dashboard,不能 push。

3敏捷节奏与任务管理

一个标准 Sprint(2 周)的时间轴:

gantt title 双周 Sprint 时间轴 dateFormat YYYY-MM-DD axisFormat %m-%d section 规划 Sprint Planning :p1, 2026-01-05, 1d section 开发 Day 1-7 编码 :a1, after p1, 7d Daily Standup :crit, milestone, after p1, 0d section 集成 Code Freeze :milestone, 2026-01-15, 0d 集成测试 + 修复 :a2, 2026-01-15, 2d section 收尾 Sprint Review :r1, 2026-01-17, 1d Retrospective :r2, after r1, 1d

3.1 GitLab Issue 作为最小工作单元

3.2 Issue 模板(团队约定)

## 背景
为什么要做?解决谁的什么问题?

## 验收标准 (Definition of Done)
- [ ] 功能 X 在场景 Y 下表现为 Z
- [ ] 单元测试覆盖 ≥ 80%
- [ ] 文档已更新

## 技术线索
建议涉及的模块、需要参考的 issue/MR

## Claude Code prompt(可选)
> 当此任务交给 Claude Code 时使用的初始指令

4分支策略与协作开发

推荐 GitLab Flow 简化版:长期分支 main(生产)+ develop(集成),短期分支 feature/* fix/* hotfix/*

gitGraph commit id: "v1.0.0" branch develop checkout develop commit id: "init dev" branch feature/login checkout feature/login commit id: "form UI" commit id: "API call" checkout develop merge feature/login tag: "MR #12" branch feature/payment checkout feature/payment commit id: "stripe sdk" commit id: "callback" checkout develop merge feature/payment tag: "MR #15" checkout main merge develop tag: "v1.1.0" branch hotfix/leak checkout hotfix/leak commit id: "fix mem leak" checkout main merge hotfix/leak tag: "v1.1.1" checkout develop merge main

4.1 分支命名规范

类型命名从哪开合到哪
新功能feature/<issue-id>-short-descdevelopdevelop
缺陷fix/<issue-id>-short-descdevelopdevelop
线上紧急修复hotfix/<issue-id>-short-descmainmain + develop
发布准备release/v1.2.0developmain

4.2 Commit 规范(Conventional Commits)

feat(login): add OAuth2 google provider           # 新功能
fix(payment): handle stripe webhook timeout       # 修 bug
refactor(api): split user service                 # 重构
docs(readme): update local setup steps            # 文档
test(login): add edge case for empty password     # 测试
chore(deps): bump axios to 1.7.0                  # 杂项
ci(gitlab): cache pnpm store                      # CI
为什么强制规范? Conventional Commits 让 changelog 自动化、release 工具识别 break change、Claude Code 也能写出风格一致的提交。

4.3 分支保护规则(Maintainer 设置)

5Merge Request 与代码评审

MR 是协作的核心载体。它不是把代码丢过去就行——它是一次知识传递

flowchart LR A[开发完成] --> B[push feature 分支] B --> C[GitLab 网页发起 MR] C --> D{Draft?} D -->|是| E[继续开发] E --> C D -->|否| F[CI 自动跑] F --> G{流水线通过?} G -->|❌| H[修复后重 push] H --> F G -->|✅| I[请求评审] I --> J[Reviewer 阅读 diff] J --> K{有 comment?} K -->|是| L[作者回复/修改] L --> F K -->|approve| M[Maintainer 合并] M --> N[Squash & Merge] N --> O[源分支自动删除] classDef ok fill:#3fb950,stroke:#3fb950,color:#fff classDef warn fill:#1c232c,stroke:#d29922,color:#d29922 class M,N,O ok class D,G,K warn

5.1 MR 描述模板

## 这个 MR 做了什么
一句话总结。

Closes #123

## 怎么验证
1. 拉这个分支
2. `pnpm dev`,访问 /login
3. 用账号 demo/123 登录,预期跳转到 /dashboard

## 截图 / 录屏
(UI 改动必须贴)

## Checklist
- [ ] 自测通过
- [ ] 加了单元测试
- [ ] 更新了文档
- [ ] 无 console.log 残留

5.2 评审重点(按优先级)

  1. 逻辑正确性 — 真的解决了 issue 描述的问题吗?
  2. 边界与错误处理 — 空值/超时/并发/权限
  3. 安全 — SQL 注入、XSS、secret 泄露、越权
  4. 可读性 — 命名、复杂度、注释
  5. 性能 — N+1 查询、大对象、内存泄漏
  6. 风格 — 交给 linter,不要在评审里争论

6Claude Code 工作流嵌入

把 Claude Code 当成一个高效但需要被评审的初级工程师。它不绕过任何流程,只是把每个环节做快。

flowchart TB subgraph Plan[📋 计划阶段] A1[读 Issue + CLAUDE.md] --> A2[Claude: 生成实现方案] A2 --> A3[人: review 方案] end subgraph Code[⚒️ 编码阶段] B1[Claude: 写代码 + 测试] --> B2[本地跑测试] B2 --> B3{通过?} B3 -->|否| B1 B3 -->|是| B4[Claude: 写 commit message] end subgraph Review[🔍 评审阶段] C1[push + 发 MR] --> C2[CI 自动跑] C2 --> C3[人 review diff] C3 --> C4{要改?} C4 -->|是| B1 C4 -->|否| C5[合并] end Plan --> Code --> Review classDef plan fill:#1c232c,stroke:#bc8cff,color:#bc8cff classDef code fill:#1c232c,stroke:#58a6ff,color:#58a6ff classDef review fill:#1c232c,stroke:#3fb950,color:#3fb950 class A1,A2,A3 plan class B1,B2,B3,B4 code class C1,C2,C3,C4,C5 review

6.1 CLAUDE.md:项目级"操作手册"

# 项目约定
- 技术栈: Next.js 15 + TypeScript + Prisma + PostgreSQL
- 测试: vitest + playwright,单测在 *.test.ts,e2e 在 /e2e
- 风格: 函数式优先,避免 class;早 return,少嵌套
- 提交: 遵循 conventional commits

# 禁止
- 不要直接改 prisma migration,要用 `pnpm db:migrate`
- 不要引入新依赖前先问
- 不要在生产代码留 console.log

# 常用命令
- 开发: `pnpm dev`
- 测试: `pnpm test`
- lint: `pnpm lint --fix`
- 类型检查: `pnpm typecheck`

6.2 推荐 Claude Code 使用范式

✅ 合适场景

  • 样板代码(CRUD、表单、组件)
  • 重构 / 改名 / 拆文件
  • 写单元测试和文档
  • 定位 bug(带 stack trace)
  • 调研第三方库 API

⚠️ 需谨慎

  • 新架构决策 — 人先定方向
  • 安全敏感代码 — 必须人审
  • 性能关键路径 — 需 benchmark
  • 复杂业务逻辑 — 提供完整背景
  • 跨服务集成 — 给契约文档

6.3 让 Claude Code 走完整流程的提示词样例

读 GitLab issue #234,理解需求后:
1. 先给我一个 5 步以内的实现计划,等我 ok
2. 从 develop 开一个分支 feature/234-user-export
3. 写代码 + 单元测试
4. 跑 `pnpm test` 和 `pnpm typecheck`,全绿再提
5. 写规范的 commit message,push 上去
6. 用 glab cli 发起 MR,描述里 Closes #234

每步完成报告一次,不要一口气干完。

7调试与缺陷管理

7.1 Bug 全流程

flowchart LR A[👤 用户/QA 上报] --> B[GitLab Issue
label: ~bug ~severity::high] B --> C[分类 Triage] C --> D{严重程度} D -->|P0 阻塞| E[hotfix 分支
立即处理] D -->|P1 高| F[当前 Sprint] D -->|P2 中| G[下个 Sprint] D -->|P3 低| H[Backlog] E --> I[复现 + 写失败测试] F --> I G --> I I --> J[定位根因] J --> K[修复 + 让测试通过] K --> L[MR + Review] L --> M[合并 + 部署] M --> N[关闭 Issue
验证修复] classDef p0 fill:#f85149,stroke:#f85149,color:#fff classDef p1 fill:#d29922,stroke:#d29922,color:#fff class E p0 class F p1

7.2 调试三板斧(与 Claude Code 配合)

1. 复现

没有稳定复现路径就先不修。把"步骤 + 期望 + 实际 + 环境"写进 Issue。

2. 失败测试

先写一个能复现 bug 的测试用例。让它在修复前 FAIL,修复后 PASS。这是回归网。

3. 二分定位

git bisect 在历史中二分查找引入 bug 的 commit,速度极快。

7.3 Claude Code 调试提示词

这是一个生产 bug:用户点击「导出」按钮,500 报错。
错误日志:[贴 stack trace]
相关代码:src/api/export.ts
最近改动:MR !87

请:
1. 列出 3 个最可能的根因,按概率排序
2. 告诉我怎么本地复现
3. 写一个能稳定触发这个 bug 的失败测试
4. 不要直接改代码,等我确认根因再动手

8CI/CD 构建与部署

GitLab CI 用 .gitlab-ci.yml 定义流水线。每次 push / MR 自动触发。

flowchart LR A[Git Push] --> B[trigger pipeline] B --> C1[lint] B --> C2[typecheck] B --> C3[test] C1 & C2 & C3 --> D[build] D --> E[docker image] E --> F{分支?} F -->|develop| G[deploy staging] F -->|main + tag| H[manual approve] H --> I[deploy production] G --> J[运行 e2e] J --> K[通知 Slack] I --> L[健康检查] L --> M[通知 + 监控] classDef parallel fill:#1c232c,stroke:#58a6ff,color:#58a6ff classDef gate fill:#1c232c,stroke:#d29922,color:#d29922 classDef prod fill:#3fb950,stroke:#3fb950,color:#fff class C1,C2,C3 parallel class F,H gate class I,L,M prod

8.1 极简版 .gitlab-ci.yml

stages: [verify, build, deploy]

default:
  image: node:22-alpine
  cache:
    key: $CI_COMMIT_REF_SLUG
    paths: [node_modules/, .pnpm-store/]

install:
  stage: verify
  script:
    - corepack enable
    - pnpm install --frozen-lockfile

lint:
  stage: verify
  needs: [install]
  script: pnpm lint

typecheck:
  stage: verify
  needs: [install]
  script: pnpm typecheck

test:
  stage: verify
  needs: [install]
  script: pnpm test --coverage
  coverage: '/Lines\s*:\s*([\d.]+)%/'
  artifacts:
    reports:
      junit: junit.xml

build:
  stage: build
  needs: [lint, typecheck, test]
  script:
    - pnpm build
    - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
  only: [develop, main, tags]

deploy_staging:
  stage: deploy
  needs: [build]
  script: kubectl set image deploy/app app=$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA -n staging
  environment: staging
  only: [develop]

deploy_prod:
  stage: deploy
  needs: [build]
  script: kubectl set image deploy/app app=$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA -n prod
  environment: production
  when: manual
  only: [tags]

8.2 Pipeline 设计原则

9发布与回滚

9.1 标准发布流程

1

从 develop 切 release 分支

git checkout develop && git pull
git checkout -b release/v1.2.0
2

冻结新功能,只允许修 bug

这条分支接下来 2–3 天只接受 fix。同时跑回归测试。

3

合并到 main 并打 tag

git checkout main && git merge --no-ff release/v1.2.0
git tag -a v1.2.0 -m "Release v1.2.0"
git push origin main --tags

tag push 触发 CI 的 deploy_prod job。

4

把 main 合回 develop

避免 release 期间的 fix 在 develop 丢失。

5

在 GitLab Releases 发版本说明

关联 milestone、列出关键变更、附产物链接。可由 Claude Code 基于 commit 历史生成 draft。

9.2 紧急回滚

# 方式一:重新部署上个 tag 的镜像(最快)
kubectl set image deploy/app app=$REGISTRY:v1.1.9 -n prod

# 方式二:revert commit 并走流程(更干净)
git checkout main
git revert 
git push        # 触发新 pipeline → 自动部署

10团队上手 Checklist

🏗️ 项目初始化

  • [ ] 创建 Group + Project
  • [ ] 配置分支保护规则
  • [ ] 添加 .gitlab-ci.yml
  • [ ] 编写 CONTRIBUTING.md
  • [ ] 添加 CLAUDE.md
  • [ ] 设置 CI/CD 变量与 secret
  • [ ] 配置 Issue / MR 模板

👥 团队协作

  • [ ] 邀请成员并分配角色
  • [ ] 创建 Issue Board (Sprint 看板)
  • [ ] 设置每日 standup 时间
  • [ ] 约定 commit / 命名规范
  • [ ] 设置 CODEOWNERS
  • [ ] 配置评审轮换

🤖 Claude Code 接入

  • [ ] 团队成员安装并登录 Claude Code
  • [ ] 写好项目级 CLAUDE.md
  • [ ] 约定 Claude 提交的 commit 标识
  • [ ] 培训:何时用 / 不用 Claude
  • [ ] 把 lint / test 命令文档化

🚀 持续改进

  • [ ] Sprint Retrospective 固化
  • [ ] 监控 MR 平均合并时间
  • [ ] 监控 CI 失败率与时长
  • [ ] 跟踪线上 bug 引入率
  • [ ] 季度更新 CLAUDE.md
记住一件事: 流程的目的不是变重,而是让正确做事比偷懒更省力。每多一条规则,问自己:「不加这条会出现什么问题?真的痛到要加吗?」