从需求→PRD 设计→技术方案→API 开发→AI Coding→测试→CI/CD→自动部署→UI 验收全流程自动化
版本 v2026.3.14 | 支持人机协同 | 适配各研发角色 Agents
| 场景类型 | 描述 | 自动化程度 |
|---|---|---|
| 新功能开发 | 从需求 PRD 到上线部署的完整流程 | 90%+ |
| Bug 修复 | 问题定位→代码修复→测试验证→热部署 | 85%+ |
| 代码重构 | 技术债务清理、性能优化、架构升级 | 80%+ |
| 接口开发 | 前后端 API 协议设计→实现→联调→测试 | 95%+ |
| 回归测试 | 全量自动化测试执行与报告生成 | 100% |
┌─────────────────────────────────────────────────────────────┐
│ OpenClaw Gateway Layer │
├─────────────────────────────────────────────────────────────┤
│ • Channel Adapters: Telegram/Discord/Slack/Feishu/WeChat │
│ • Model Providers: Claude/GPT/Gemini/Local LLM │
│ • Skill Executor: 13 类核心技能包 │
│ • MCP Server: Model Context Protocol 服务 │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ Agent Orchestration Layer │
├─────────────────────────────────────────────────────────────┤
│ • Planner Agent: 任务拆解与规划 │
│ • Architect Agent: 技术方案设计 │
│ • Developer Agent: 代码生成与实现 │
│ • Tester Agent: 测试用例编写与执行 │
│ • Reviewer Agent: 代码审查与安全审计 │
│ • DevOps Agent: CI/CD 与部署 │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ Execution & Tool Layer │
├─────────────────────────────────────────────────────────────┤
│ • Browser Automation: Playwright/Puppeteer │
│ • File Operations: 读写/搜索/批量处理 │
│ • Shell Commands: Linux/Mac/Windows 命令执行 │
│ • API Calls: REST/GraphQL/gRPC │
│ • Database Ops: SQL/NoSQL 操作 │
└─────────────────────────────────────────────────────────────┘
// 典型任务的数据流转示例
{
"task_id": "TASK-2026-0314-001",
"status": "in_progress",
"current_stage": "api_development",
"stages": [
{"name": "requirement_analysis", "status": "completed", "agent": "prd-agent"},
{"name": "technical_design", "status": "completed", "agent": "architect-agent"},
{"name": "api_protocol", "status": "completed", "agent": "api-designer"},
{"name": "backend_dev", "status": "in_progress", "agent": "backend-dev-agent"},
{"name": "frontend_dev", "status": "pending", "agent": "frontend-dev-agent"},
{"name": "unit_test", "status": "pending", "agent": "test-agent"},
{"name": "integration_test", "status": "pending", "agent": "test-agent"},
{"name": "ci_cd_deploy", "status": "pending", "agent": "devops-agent"},
{"name": "ui_acceptance", "status": "pending", "agent": "ui-test-agent"}
],
"artifacts": {
"prd_doc": "/docs/prd/TASK-001-prd.md",
"tech_design": "/docs/design/TASK-001-architecture.md",
"api_spec": "/docs/api/TASK-001-openapi.yaml",
"code_repo": "https://github.com/org/project",
"test_report": "/reports/test/TASK-001-report.html"
}
}
职责定位:将模糊的需求转化为结构化的产品需求文档 (PRD),包含功能列表、用户故事、验收标准。
# OpenClaw Skill: prd-designer
技能名称:prd-designer
触发命令:/create-prd [需求描述]
输出产物:Markdown 格式 PRD 文档
# 能力清单
- 需求澄清问答(主动提问补全信息)
- 用户故事地图绘制
- 功能优先级排序 (MoSCoW 法则)
- 验收标准定义 (Given-When-Then 格式)
- 竞品分析摘要生成
- 原型图文字描述生成
# 命令行调用
openclaw run prd-designer \
--input "需要一个用户积分系统,支持签到、任务、兑换" \
--output docs/prd/points-system-prd.md
# Chat 界面交互
用户:/create-prd 我们需要一个会员等级系统
PRD-Agent: 收到!让我先确认几个关键问题:
1. 会员等级分为几级?是否有升级规则?
2. 会员权益包含哪些?(折扣/专属客服/优先发货等)
3. 是否需要付费订阅还是成长值升级?
4. 预期上线时间和优先级?
用户:分 5 级,按消费金额自动升级,权益包括...
PRD-Agent: 好的,正在生成 PRD 文档...
✅ PRD 已生成:docs/prd/membership-system-prd.md
# 产品需求文档 (PRD)
## 1. 文档信息
- 项目名称:会员等级系统
- 版本号:v1.0
- 创建时间:2026-03-14
- 负责人:[产品经理姓名]
## 2. 背景与目标
### 2.1 业务背景
[描述为什么要做这个功能]
### 2.2 产品目标
- 提升用户复购率 20%
- 增加高价值用户粘性
- ...
## 3. 功能需求
### 3.1 功能列表
| 功能模块 | 优先级 | 描述 |
|---------|--------|------|
| 会员等级展示 | P0 | 用户中心显示当前等级 |
| 升级规则引擎 | P0 | 自动计算并升级 |
| ... | ... | ... |
### 3.2 用户故事
**US-001**: 作为普通用户,我希望查看我的会员等级,以便了解当前权益
- 验收标准:
- Given 用户已登录
- When 进入用户中心页面
- Then 显示当前会员等级和进度条
## 4. 非功能需求
- 性能:等级计算响应时间 < 100ms
- 安全:防止等级数据篡改
- ...
职责定位:基于 PRD 设计技术架构方案,包括技术选型、系统分层、数据库设计、接口规范等。
# OpenClaw Skill: system-architect
技能名称:system-architect
触发命令:/design-architecture [PRD 文档路径]
输出产物:技术方案设计文档 + 架构图 (Mermaid)
# 能力清单
- 技术栈推荐与对比分析
- 微服务拆分建议
- 数据库 ER 图设计
- API 网关与路由规划
- 缓存策略设计
- 高可用与容灾方案
- 安全性设计(认证/授权/加密)
# 命令行调用
openclaw run system-architect \
--input docs/prd/membership-system-prd.md \
--output docs/design/membership-architecture.md \
--stack "Java,SpringBoot,MySQL,Redis,RabbitMQ"
# Chat 界面交互
用户:/design-architecture docs/prd/membership-system-prd.md
Architect-Agent: 正在分析 PRD 文档...
正在生成技术方案...
✅ 技术方案已生成:
- 总体架构:docs/design/membership-architecture.md
- 数据库设计:docs/design/membership-er-diagram.md
- API 规范:docs/design/membership-api-spec.yaml
# 技术方案设计文档
## 1. 架构概览
```mermaid
graph TB
subgraph 前端层
Web[Web 应用] --> Gateway
Mobile[移动端] --> Gateway
end
subgraph 网关层
Gateway[API Gateway] --> Auth[认证服务]
end
subgraph 业务服务层
Auth --> Member[会员服务]
Auth --> Points[积分服务]
Member --> DB[(MySQL)]
Points --> Redis[(Redis)]
end
```
## 2. 技术选型
| 层级 | 技术栈 | 选型理由 |
|-----|--------|---------|
| 后端框架 | Spring Boot 3.2 | 生态成熟、团队熟悉 |
| 数据库 | MySQL 8.0 | ACID 事务保证 |
| 缓存 | Redis 7.0 | 高性能、数据结构丰富 |
| 消息队列 | RabbitMQ | 可靠投递、延迟队列 |
## 3. 数据库设计
### 3.1 会员表 (t_member)
```sql
CREATE TABLE t_member (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL UNIQUE,
level TINYINT DEFAULT 1,
growth_value INT DEFAULT 0,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_user_id (user_id),
INDEX idx_level (level)
);
```
## 4. 接口规范
- RESTful 风格
- JWT 认证
- 统一响应格式
- ...
职责定位:根据技术方案和 API 协议,自动生成后端业务代码、数据访问层、服务层实现。
# OpenClaw Skill: backend-developer
技能名称:backend-developer
触发命令:/generate-backend [API 规范路径] --language [Java/Python/Go]
输出产物:完整的后端项目代码
# 能力清单
- Controller/Service/Repository 三层代码生成
- 数据库迁移脚本 (Flyway/Liquibase)
- 单元测试代码 (JUnit/Pytest)
- API 文档注解 (Swagger/OpenAPI)
- 异常处理与日志规范
- 配置管理 (多环境配置)
# 命令行调用
openclaw run backend-developer \
--input docs/design/membership-api-spec.yaml \
--output src/backend/membership-service \
--language Java \
--framework SpringBoot \
--with-tests true
# Chat 界面交互
用户:/generate-backend docs/design/membership-api-spec.yaml
Backend-Agent: 正在解析 API 规范...
正在生成 Spring Boot 项目结构...
正在编写业务逻辑代码...
正在生成单元测试...
✅ 后端代码已生成:
src/backend/membership-service/
├── src/main/java/com/example/membership/
│ ├── controller/
│ │ ├── MemberController.java
│ │ └── LevelController.java
│ ├── service/
│ │ ├── MemberService.java
│ │ └── impl/MemberServiceImpl.java
│ ├── repository/
│ │ └── MemberRepository.java
│ └── entity/
│ └── Member.java
├── src/test/java/
│ └── controller/MemberControllerTest.java
├── pom.xml
└── application.yml
职责定位:根据 API 协议和 UI 设计规范,自动生成前端页面组件、状态管理、API 调用层。
# OpenClaw Skill: frontend-developer
技能名称:frontend-developer
触发命令:/generate-frontend [API 规范路径] --framework [React/Vue/Angular]
输出产物:完整的前端项目代码
# 能力清单
- 页面组件生成 (JSX/Vue SFC)
- 状态管理 (Redux/Zustand/Pinia)
- API 客户端封装 (Axios/React Query)
- 路由配置 (React Router/Vue Router)
- 样式方案 (Tailwind/CSS Modules)
- 表单验证 (Yup/Zod)
- 国际化支持 (i18next)
# 命令行调用
openclaw run frontend-developer \
--input docs/design/membership-api-spec.yaml \
--output src/frontend/membership-web \
--framework React \
--typescript true \
--with-tailwind true
# Chat 界面交互
用户:/generate-frontend docs/design/membership-api-spec.yaml
Frontend-Agent: 正在解析 API 规范...
正在生成 React + TypeScript 项目...
正在编写组件代码...
正在配置 TailwindCSS...
✅ 前端代码已生成:
src/frontend/membership-web/
├── src/
│ ├── components/
│ │ ├── MemberCard.tsx
│ │ ├── LevelProgress.tsx
│ │ └── BenefitsList.tsx
│ ├── pages/
│ │ ├── MembershipPage.tsx
│ │ └── UpgradePage.tsx
│ ├── hooks/
│ │ └── useMembership.ts
│ ├── api/
│ │ └── membershipApi.ts
│ ├── store/
│ │ └── membershipStore.ts
│ └── styles/
│ └── globals.css
├── package.json
└── tailwind.config.js
职责定位:自动生成单元测试、集成测试、E2E 测试用例,执行测试并生成质量报告。
# OpenClaw Skill: qa-engineer
技能名称:qa-engineer
触发命令:/generate-tests [代码路径] --type [unit/integration/e2e]
输出产物:测试代码 + 测试报告
# 能力清单
- 单元测试生成 (JUnit/Pytest/Jest)
- 集成测试场景设计
- E2E 测试脚本 (Playwright/Cypress)
- 接口自动化测试 (Postman/Newman)
- 性能测试脚本 (JMeter/k6)
- 测试覆盖率分析
- Bug 预测与风险识别
# 命令行调用
# 生成单元测试
openclaw run qa-engineer \
--input src/backend/membership-service \
--type unit \
--coverage-threshold 80
# 生成 E2E 测试
openclaw run qa-engineer \
--input src/frontend/membership-web \
--type e2e \
--browser chromium \
--headless false
# Chat 界面交互
用户:/generate-tests src/backend/membership-service --type unit
QA-Agent: 正在分析代码结构...
正在生成测试用例...
正在执行测试...
✅ 测试结果:
- 通过:45/48
- 失败:2
- 跳过:1
- 覆盖率:82.5%
详细报告:reports/test/unit-test-report.html
职责定位:配置 CI/CD 流水线,管理 Docker 镜像,编排 K8S 部署,监控系统健康度。
# OpenClaw Skill: devops-engineer
技能名称:devops-engineer
触发命令:/setup-cicd [项目路径] --platform [Jenkins/GitLab CI/GitHub Actions]
输出产物:CI/CD 配置文件 + 部署脚本
# 能力清单
- Jenkins Pipeline 编写 (Declarative/Scripted)
- Dockerfile 优化与多阶段构建
- Docker Compose 编排
- Kubernetes YAML 生成 (Deployment/Service/Ingress)
- Helm Chart 打包
- KubeSphere 集成配置
- 监控告警配置 (Prometheus Rules)
- 日志收集配置 (Fluentd/ELK)
# 命令行调用
# 配置 Jenkins Pipeline
openclaw run devops-engineer \
--input src/backend/membership-service \
--platform Jenkins \
--output ci/jenkins/Jenkinsfile \
--registry harbor.example.com \
--k8s-cluster production
# Chat 界面交互
用户:/setup-cicd . --platform Jenkins
DevOps-Agent: 正在分析项目结构...
正在生成 Jenkinsfile...
正在配置 Docker 构建...
正在生成 K8S 部署配置...
✅ CI/CD 配置已生成:
ci/jenkins/
├── Jenkinsfile
├── docker-build.sh
└── k8s-deploy.sh
k8s/
├── deployment.yaml
├── service.yaml
├── ingress.yaml
└── configmap.yaml
# Step 1: 需求输入
用户输入:"需要一个用户签到系统,连续签到 7 天送优惠券"
# Step 2: PRD Agent 启动
openclaw run prd-designer \
--input "需要一个用户签到系统,连续签到 7 天送优惠券" \
--output docs/prd/checkin-system-prd.md \
--interactive true
# Step 3: PRD Agent 主动澄清(交互式)
PRD-Agent:
❓ 问题 1: 签到时间范围是自然日还是 24 小时滚动?
❓ 问题 2: 优惠券类型和面额是多少?
❓ 问题 3: 断签后是否重新累计?
❓ 问题 4: 是否需要签到提醒(推送/短信)?
# Step 4: 生成 PRD 文档
✅ 输出:docs/prd/checkin-system-prd.md
- 功能列表
- 用户故事
- 验收标准
- 原型描述
# Step 1: 架构师 Agent 读取 PRD
openclaw run system-architect \
--input docs/prd/checkin-system-prd.md \
--output docs/design/checkin-architecture.md \
--stack "Java,SpringBoot,MySQL,Redis"
# Step 2: 生成技术方案
✅ 输出内容:
- 系统架构图 (Mermaid)
- 技术选型说明
- 数据库 ER 图
- API 接口清单
- 缓存策略
- 安全设计
# Step 3: 生成 API 协议 (OpenAPI 3.0)
openclaw run api-designer \
--input docs/design/checkin-architecture.md \
--output docs/api/checkin-openapi.yaml \
--format openapi3
# Step 1: 并行启动前后端开发 Agents
# 后端开发
openclaw run backend-developer \
--input docs/api/checkin-openapi.yaml \
--output src/backend/checkin-service \
--language Java \
--framework SpringBoot \
--with-tests true &
# 前端开发
openclaw run frontend-developer \
--input docs/api/checkin-openapi.yaml \
--output src/frontend/checkin-web \
--framework React \
--typescript true &
wait # 等待两个任务完成
# Step 2: Claude Code 深度优化
cd src/backend/checkin-service
claude --prompt "优化代码质量,添加完善的错误处理和日志"
cd ../../frontend/checkin-web
claude --prompt "优化组件性能,添加加载状态和错误边界"
# Step 1: 生成并执行单元测试
openclaw run qa-engineer \
--input src/backend/checkin-service \
--type unit \
--coverage-threshold 80 \
--report reports/test/unit-report.html
# Step 2: 生成并执行集成测试
openclaw run qa-engineer \
--input src/backend/checkin-service \
--type integration \
--database testdb \
--report reports/test/integration-report.html
# Step 3: 生成并执行 E2E 测试
openclaw run qa-engineer \
--input src/frontend/checkin-web \
--type e2e \
--browser chromium \
--scenarios "签到流程,优惠券领取,连续签到奖励" \
--report reports/test/e2e-report.html
# Step 1: 配置 CI/CD 流水线
openclaw run devops-engineer \
--input . \
--platform Jenkins \
--output ci/jenkins/Jenkinsfile \
--registry harbor.example.com \
--k8s-namespace checkin-prod
# Step 2: 触发 Jenkins Pipeline
curl -X POST http://jenkins.example.com/job/checkin-service/build \
-H "Authorization: Bearer $JENKINS_TOKEN"
# Step 3: 监控部署状态
kubectl get pods -n checkin-prod -w
kubectl logs -f deployment/checkin-service -n checkin-prod
# Step 1: 执行 UI 自动化测试
openclaw run ui-tester \
--base-url https://checkin.example.com \
--scenarios tests/ui/checkin-flows.spec.ts \
--browser chromium \
--video true \
--report reports/ui/acceptance-report.html
# Step 2: 生成验收报告
✅ 输出:
- 测试通过率:98.5%
- 截图证据:reports/ui/screenshots/
- 录屏回放:reports/ui/videos/
- 性能指标:LCP=1.2s, FID=50ms, CLS=0.05
# Step 3: 人工复核(可选)
如果通过率 < 95%,触发人工 review 流程
| 组件 | 最低要求 | 推荐配置 |
|---|---|---|
| 操作系统 | Ubuntu 20.04 / macOS 12 / Windows 11 | Ubuntu 22.04 LTS |
| CPU | 4 核 | 8 核+ |
| 内存 | 8GB | 16GB+ |
| 磁盘 | 20GB 可用空间 | 50GB+ SSD |
| Node.js | v22.x | v22.x LTS |
# Step 1: 一键安装脚本
curl -fsSL https://openclaw.ai/install | bash
# Step 2: 启动配置向导
openclaw onboard
# Step 3: 配置 AI 模型 Provider
# 选择 Claude (推荐) 或 GPT-4/Gemini
export ANTHROPIC_API_KEY="sk-ant-xxxxx"
# Step 4: 配置通信渠道
# 选择 Telegram/Discord/Slack/飞书等
openclaw channel add telegram
# Step 5: 验证安装
openclaw --version
# 输出:OpenClaw v2026.3.7
# Step 6: 启动 OpenClaw
openclaw start
# 访问 Dashboard
# http://localhost:18789?token=your-token
# 方式一:原生 Windows 安装(PowerShell)
# Step 1: 安装 Node.js 22
winget install OpenJS.NodeJS.LTS
# Step 2: 安装 OpenClaw
npm install -g @openclaw/core
# Step 3: 配置环境变量
[System.Environment]::SetEnvironmentVariable("ANTHROPIC_API_KEY", "sk-ant-xxxxx", "User")
# Step 4: 启动
openclaw start
# 方式二:WSL2 安装(推荐)
# Step 1: 启用 WSL2
wsl --install -d Ubuntu-22.04
# Step 2: 进入 WSL 环境
wsl
# Step 3: 执行 Linux 安装脚本
curl -fsSL https://openclaw.ai/install | bash
# 安装研发自动化技能合集
openclaw skill install prd-designer
openclaw skill install system-architect
openclaw skill install backend-developer
openclaw skill install frontend-developer
openclaw skill install qa-engineer
openclaw skill install devops-engineer
openclaw skill install ui-tester
# 安装 MCP Servers(Model Context Protocol)
openclaw mcp install github # GitHub 集成
openclaw mcp install filesystem # 文件系统操作
openclaw mcp install postgres # PostgreSQL 数据库
openclaw mcp install playwright # 浏览器自动化
# 查看已安装技能
openclaw skill list
# 更新所有技能
openclaw skill update --all
# ~/.openclaw/config.yaml
# OpenClaw 全局配置文件
# AI 模型配置
models:
default: claude-opus-4.6
providers:
anthropic:
api_key: ${ANTHROPIC_API_KEY}
base_url: https://api.anthropic.com
openai:
api_key: ${OPENAI_API_KEY}
base_url: https://api.openai.com/v1
# 通信渠道配置
channels:
telegram:
enabled: true
bot_token: ${TELEGRAM_BOT_TOKEN}
feishu:
enabled: true
app_id: ${FEISHU_APP_ID}
app_secret: ${FEISHU_APP_SECRET}
# 技能配置
skills:
prd-designer:
model: claude-sonnet-4.6
temperature: 0.7
max_tokens: 8192
backend-developer:
model: claude-opus-4.6
temperature: 0.3
max_tokens: 16384
# MCP Servers 配置
mcp:
servers:
github:
command: npx
args: ["-y", "@modelcontextprotocol/server-github"]
env:
GITHUB_TOKEN: ${GITHUB_TOKEN}
filesystem:
command: npx
args: ["-y", "@modelcontextprotocol/server-filesystem"]
config:
allowed_paths: ["/home/user/projects"]
# 日志配置
logging:
level: info
file: /var/log/openclaw/openclaw.log
max_size: 100MB
retention_days: 30
# Step 1: 安装 Node.js 18+
node --version # 确保 >= 18.x
# Step 2: 全局安装 Claude Code
npm install -g @anthropic-ai/claude-code
# Step 3: 配置 API Key
export CLAUDE_CODE_API_KEY="sk-ant-xxxxx"
# Step 4: 验证安装
claude --version
# 输出:Claude Code v2.1.51
# Step 5: 初始化项目
cd /path/to/your/project
claude init
# 创建 .claude/plugins/multi-agent-config.json
{
"agents": {
"planner": {
"model": "claude-opus-4.6",
"system_prompt": "你是一个专业的需求分析师,擅长将模糊需求拆解为可执行的任务清单",
"tools": ["file_read", "file_write", "shell"],
"temperature": 0.7
},
"architect": {
"model": "claude-opus-4.6",
"system_prompt": "你是资深系统架构师,负责设计高可用、可扩展的技术方案",
"tools": ["file_read", "file_write", "mermaid_renderer"],
"temperature": 0.5
},
"tdd-guide": {
"model": "claude-sonnet-4.6",
"system_prompt": "你是 TDD 专家,坚持'测试先行'原则,确保代码质量",
"tools": ["file_read", "file_write", "test_runner"],
"temperature": 0.3
},
"code-reviewer": {
"model": "claude-opus-4.6",
"system_prompt": "你是代码审查专家,关注代码质量、安全性和最佳实践",
"tools": ["file_read", "git_diff"],
"temperature": 0.2
},
"security-reviewer": {
"model": "claude-opus-4.6",
"system_prompt": "你是安全专家,负责识别 OWASP Top 10 等安全漏洞",
"tools": ["file_read", "security_scanner"],
"temperature": 0.2
}
},
"workflow": {
"sequence": ["planner", "architect", "tdd-guide", "code-reviewer", "security-reviewer"],
"parallel_allowed": ["code-reviewer", "security-reviewer"]
}
}
# Claude Code 内置斜杠命令
/plan # 生成任务规划
/tdd # 测试驱动开发模式
/code-review # 代码审查
/security-scan # 安全漏洞扫描
/multi-plan # 多智能体协同规划
/instinct-status # 查看学习到的模式
# 自定义斜杠命令(在 .claude/commands/ 目录下创建)
# 示例:.claude/commands/generate-api.md
---
name: generate-api
description: 根据 PRD 生成 API 设计
---
请根据以下 PRD 文档,设计 RESTful API 接口规范:
1. 列出所有资源 endpoint
2. 定义请求/响应 schema
3. 标注认证要求
4. 生成 OpenAPI 3.0 规范文件
# .claude/hooks/before-commit.json
{
"hook": "before-commit",
"command": "claude",
"args": [
"--prompt",
"检查暂存区的代码变更,进行代码审查并给出改进建议"
]
}
# .claude/hooks/after-merge.json
{
"hook": "after-merge",
"command": "openclaw",
"args": [
"run",
"qa-engineer",
"--type",
"regression",
"--branch",
"${MERGE_BRANCH}"
]
}
# CLAUDE.md (项目根目录)
# 项目级编码规范,Claude Code 会自动读取并遵守
# 技术栈
- Backend: Java 17, Spring Boot 3.2
- Frontend: React 18, TypeScript 5, TailwindCSS
- Database: MySQL 8.0, Redis 7.0
- Testing: JUnit 5, Playwright
# 代码规范
- 使用 4 空格缩进
- 函数长度不超过 50 行
- 所有公共方法必须有 Javadoc
- 禁止使用 System.out.println,使用 SLF4J 日志
# 提交规范
- Commit message 遵循 Conventional Commits
- 格式:():
- 示例:feat(member): 添加会员等级查询接口
# 安全要求
- 所有用户输入必须校验
- 密码必须 bcrypt 加密
- API 必须 JWT 认证
- 敏感配置从环境变量读取
// Jenkinsfile (声明式 Pipeline)
pipeline {
agent any
environment {
DOCKER_REGISTRY = 'harbor.example.com'
K8S_NAMESPACE = 'membership-prod'
APP_NAME = 'membership-service'
}
stages {
stage('Checkout') {
steps {
checkout scm
echo "代码检出完成"
}
}
stage('Code Quality') {
steps {
sh 'mvn checkstyle:check'
sh 'mvn spotbugs:check'
script {
def qualityGate = sh(script: 'mvn sonar:sonar', returnStatus: true)
if (qualityGate != 0) {
error 'SonarQube 质量门禁未通过'
}
}
}
}
stage('Unit Test') {
steps {
sh 'mvn clean test'
junit '**/target/surefire-reports/*.xml'
publishCoverage adapters: [jacocoAdapter()], sourceFileEncoding: 'UTF-8'
}
}
stage('Build Docker Image') {
steps {
script {
def version = sh(script: 'mvn help:evaluate -Dexpression=project.version -q', returnStdout: true).trim()
def imageTag = "${DOCKER_REGISTRY}/${APP_NAME}:${version}-${BUILD_NUMBER}"
sh """
docker build -t ${imageTag} .
docker push ${imageTag}
"""
env.DOCKER_IMAGE = imageTag
}
}
}
stage('Deploy to K8S') {
steps {
script {
sh """
kubectl set image deployment/${APP_NAME} \
${APP_NAME}=${DOCKER_IMAGE} \
-n ${K8S_NAMESPACE}
kubectl rollout status deployment/${APP_NAME} \
-n ${K8S_NAMESPACE} \
--timeout=300s
"""
}
}
}
stage('Smoke Test') {
steps {
sh '''
curl -f http://${APP_NAME}.${K8S_NAMESPACE}.svc.cluster.local:8080/health || exit 1
'''
}
}
stage('Notify') {
always {
script {
if (currentBuild.result == 'SUCCESS') {
// 发送成功通知到飞书/钉钉
sh 'openclaw run notify --channel feishu --message "部署成功:${APP_NAME} v${DOCKER_IMAGE}"'
} else {
// 发送失败告警
sh 'openclaw run notify --channel feishu --message "部署失败:${APP_NAME}" --level critical'
}
}
}
}
}
post {
failure {
echo '构建失败,正在回滚...'
sh "kubectl rollout undo deployment/${APP_NAME} -n ${K8S_NAMESPACE}"
}
}
}
# 多阶段构建 Dockerfile
# Stage 1: 构建阶段
FROM maven:3.9-eclipse-temurin-17 AS builder
WORKDIR /app
# 利用 Docker 缓存层加速构建
COPY pom.xml .
RUN mvn dependency:go-offline -B
COPY src ./src
RUN mvn clean package -DskipTests -B
# Stage 2: 运行阶段
FROM eclipse-temurin:17-jre-alpine
# 创建非 root 用户
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
WORKDIR /app
# 从构建阶段复制 jar 包
COPY --from=builder /app/target/*.jar app.jar
# JVM 优化参数
ENV JAVA_OPTS="-Xms512m -Xmx1024m \
-XX:+UseG1GC \
-XX:MaxGCPauseMillis=200 \
-XX:+HeapDumpOnOutOfMemoryError \
-XX:HeapDumpPath=/logs/heapdump.hprof"
# 暴露端口
EXPOSE 8080
# 切换到非 root 用户
USER appuser
# 健康检查
HEALTHCHECK --interval=30s --timeout=3s --start-period=60s --retries=3 \
CMD wget -qO- http://localhost:8080/actuator/health || exit 1
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]
# k8s/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: membership-service
namespace: membership-prod
labels:
app: membership-service
version: v1.0.0
spec:
replicas: 3
selector:
matchLabels:
app: membership-service
template:
metadata:
labels:
app: membership-service
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "8080"
prometheus.io/path: "/actuator/prometheus"
spec:
containers:
- name: membership-service
image: harbor.example.com/membership-service:v1.0.0-123
ports:
- containerPort: 8080
name: http
resources:
requests:
memory: "512Mi"
cpu: "250m"
limits:
memory: "1Gi"
cpu: "500m"
env:
- name: SPRING_PROFILES_ACTIVE
value: "prod"
- name: DB_HOST
valueFrom:
secretKeyRef:
name: db-credentials
key: host
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: db-credentials
key: password
livenessProbe:
httpGet:
path: /actuator/health/liveness
port: 8080
initialDelaySeconds: 60
periodSeconds: 10
readinessProbe:
httpGet:
path: /actuator/health/readiness
port: 8080
initialDelaySeconds: 30
periodSeconds: 5
volumeMounts:
- name: logs
mountPath: /logs
volumes:
- name: logs
emptyDir: {}
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchLabels:
app: membership-service
topologyKey: kubernetes.io/hostname
---
# k8s/service.yaml
apiVersion: v1
kind: Service
metadata:
name: membership-service
namespace: membership-prod
spec:
selector:
app: membership-service
ports:
- port: 80
targetPort: 8080
protocol: TCP
type: ClusterIP
---
# k8s/ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: membership-ingress
namespace: membership-prod
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "true"
cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
tls:
- hosts:
- membership.example.com
secretName: membership-tls
rules:
- host: membership.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: membership-service
port:
number: 80
# KubeSphere DevOps 项目配置
# 通过 KubeSphere Web Console 或 API 配置
# Step 1: 创建 DevOps 项目
ks create devops-project membership-devops \
--description "会员系统 DevOps 项目"
# Step 2: 配置 Jenkins Pipeline
ks create pipeline membership-pipeline \
--devops-project membership-devops \
--jenkinsfile-file Jenkinsfile
# Step 3: 配置触发器
ks edit pipeline membership-pipeline \
--scm-trigger \
--cron-trigger "H */2 * * *" # 每 2 小时轮询一次
# Step 4: 配置质量门禁
ks edit pipeline membership-pipeline \
--quality-gate '{
"sonarqube_condition_qualitygate": {
"status": "OK",
"metric": "coverage",
"operator": ">=",
"value": "80"
}
}'
# Step 5: 配置通知
ks edit pipeline membership-pipeline \
--notification '{
"feishu": {
"webhook": "https://open.feishu.cn/open-apis/bot/v2/hook/xxx",
"events": ["success", "failure"]
}
}'
# 创建 Helm Chart
helm create membership-chart
# 编辑 Chart.yaml
apiVersion: v2
name: membership-service
description: A Helm chart for Membership Service
type: application
version: 1.0.0
appVersion: "1.0.0"
dependencies:
- name: mysql
version: 9.0.0
repository: https://charts.bitnami.com/bitnami
condition: mysql.enabled
- name: redis
version: 18.0.0
repository: https://charts.bitnami.com/bitnami
condition: redis.enabled
# 编辑 values-prod.yaml (生产环境配置)
replicaCount: 3
image:
repository: harbor.example.com/membership-service
tag: "v1.0.0"
resources:
limits:
cpu: 500m
memory: 1Gi
requests:
cpu: 250m
memory: 512Mi
autoscaling:
enabled: true
minReplicas: 3
maxReplicas: 10
targetCPUUtilizationPercentage: 80
mysql:
enabled: false # 使用外部 RDS
redis:
enabled: false # 使用外部 Redis
# 安装 Chart
helm install membership-release ./membership-chart \
-f values-prod.yaml \
--namespace membership-prod \
--create-namespace
# 升级部署
helm upgrade membership-release ./membership-chart \
-f values-prod.yaml \
--namespace membership-prod \
--set image.tag=v1.0.1
# 回滚
helm rollback membership-release 1 --namespace membership-prod
// playwright.config.ts
import { defineConfig, devices } from '@playwright/test';
export default defineConfig({
testDir: './tests/ui',
fullyParallel: true,
forbidOnly: !!process.env.CI,
retries: process.env.CI ? 2 : 0,
workers: process.env.CI ? 1 : undefined,
reporter: [
['html', { outputFolder: 'reports/ui/html' }],
['junit', { outputFile: 'reports/ui/junit.xml' }],
['json', { outputFile: 'reports/ui/results.json' }]
],
use: {
baseURL: process.env.BASE_URL || 'http://localhost:3000',
trace: 'on-first-retry',
video: 'retain-on-failure',
screenshot: 'only-on-failure',
actionTimeout: 10000,
navigationTimeout: 30000,
},
projects: [
{
name: 'chromium',
use: { ...devices['Desktop Chrome'] },
},
{
name: 'firefox',
use: { ...devices['Desktop Firefox'] },
},
{
name: 'webkit',
use: { ...devices['Desktop Safari'] },
},
{
name: 'Mobile Chrome',
use: { ...devices['Pixel 5'] },
},
{
name: 'Mobile Safari',
use: { ...devices['iPhone 12'] },
},
],
webServer: {
command: 'npm run start',
url: 'http://localhost:3000',
timeout: 120000,
},
});
// tests/ui/checkin-flow.spec.ts
import { test, expect } from '@playwright/test';
test.describe('签到流程测试', () => {
test.beforeEach(async ({ page }) => {
// 前置条件:登录
await page.goto('/login');
await page.fill('[data-testid="username"]', 'testuser');
await page.fill('[data-testid="password"]', 'Test@123456');
await page.click('[data-testid="login-button"]');
await expect(page).toHaveURL('/home');
});
test('普通签到成功', async ({ page }) => {
await page.goto('/checkin');
// 点击签到按钮
await page.click('[data-testid="checkin-button"]');
// 验证签到成功提示
await expect(page.locator('.toast-success'))
.toContainText('签到成功!获得 10 积分');
// 验证积分变化
const pointsText = await page.textContent('[data-testid="points-balance"]');
expect(pointsText).toMatch(/今日积分:\d+/);
// 验证签到状态
await expect(page.locator('[data-testid="checkin-status"]'))
.toHaveText('今日已签到');
});
test('连续签到 7 天领取优惠券', async ({ page }) => {
// Mock API 返回连续签到 6 天的数据
await page.route('**/api/checkin/status', async route => {
await route.fulfill({
json: {
consecutiveDays: 6,
hasCheckedInToday: false
}
});
});
await page.goto('/checkin');
await page.click('[data-testid="checkin-button"]');
// 验证第 7 天签到奖励
await expect(page.locator('.coupon-modal'))
.toBeVisible();
await expect(page.locator('[data-testid="coupon-amount"]'))
.toHaveText('¥20 优惠券');
// 领取优惠券
await page.click('[data-testid="claim-coupon"]');
await expect(page.locator('.toast-success'))
.toContainText('优惠券已发放至您的账户');
});
test('断签后重新累计', async ({ page }) => {
// Mock 昨天未签到的数据
await page.route('**/api/checkin/history', async route => {
await route.fulfill({
json: {
lastCheckInDate: '2026-03-10', // 假设今天是 3 月 12 日
consecutiveDays: 0
}
});
});
await page.goto('/checkin');
await page.click('[data-testid="checkin-button"]');
// 验证连续天数重置为 1
await expect(page.locator('[data-testid="consecutive-days"]'))
.toHaveText('连续签到:1 天');
});
});
// tests/ui/visual-regression.spec.ts
import { test, expect } from '@playwright/test';
test.describe('视觉回归测试', () => {
test('会员页面视觉对比', async ({ page }) => {
await page.goto('/membership');
// 截取全屏并与基准对比
await expect(page).toHaveScreenshot('membership-page.png', {
maxDiffPixels: 100, // 允许的最大差异像素数
threshold: 0.2, // 颜色阈值
fullPage: true,
});
});
test('签到按钮状态对比', async ({ page }) => {
await page.goto('/checkin');
// 未签到状态
await expect(page.locator('[data-testid="checkin-button"]'))
.toHaveScreenshot('checkin-button-default.png');
// 点击后禁用状态
await page.click('[data-testid="checkin-button"]');
await expect(page.locator('[data-testid="checkin-button"]'))
.toHaveScreenshot('checkin-button-disabled.png');
});
});
// tests/ui/performance.spec.ts
import { test, expect } from '@playwright/test';
test.describe('性能测试', () => {
test('首页加载性能', async ({ page }) => {
const client = await page.context().newCDPSession(page);
await client.send('Performance.enable');
const startTime = Date.now();
await page.goto('/');
const loadTime = Date.now() - startTime;
// 验证加载时间 < 2 秒
expect(loadTime).toBeLessThan(2000);
// 获取性能指标
const metrics = await client.send('Performance.getMetrics');
const fcp = metrics.metrics.find(m => m.name === 'DomContentLoaded');
expect(fcp!.value).toBeLessThan(1.5);
});
test('API 响应时间', async ({ page }) => {
const responseTimes: number[] = [];
page.on('response', response => {
if (response.url().includes('/api/')) {
responseTimes.push(response.timing().receiveHeadersEnd);
}
});
await page.goto('/membership');
await page.waitForLoadState('networkidle');
const avgResponseTime = responseTimes.reduce((a, b) => a + b, 0) / responseTimes.length;
console.log(`平均 API 响应时间:${avgResponseTime.toFixed(2)}ms`);
// 验证平均响应时间 < 500ms
expect(avgResponseTime).toBeLessThan(500);
});
});
# 执行 UI 自动化测试并生成报告
npx playwright test \
--config=playwright.config.ts \
--reporter=html,junit,json \
--project=chromium \
--grep="签到流程"
# 查看 HTML 报告
npx playwright show-report reports/ui/html
# 生成 Allure 报告(可选)
npx playwright test --reporter=allure-playwright
allure serve allure-results
# 集成到 CI/CD
# 在 Jenkins Pipeline 中添加:
stage('UI Test') {
steps {
sh 'npx playwright test --reporter=junit'
junit 'reports/ui/junit.xml'
archiveArtifacts artifacts: 'reports/ui/**/*', allowEmptyArchive: true
}
}
| 研发阶段 | 自动化程度 | 人工介入点 | 协同方式 |
|---|---|---|---|
| 需求分析 | 70% | 需求优先级确认、范围界定 | AI 生成 PRD→PM 审核修订 |
| 技术架构 | 60% | 技术选型决策、架构评审 | AI 设计方案→架构师评审会 |
| 代码开发 | 90% | 核心算法、复杂业务逻辑 | AI 生成代码→Developer 优化 |
| 代码审查 | 80% | 高风险变更、安全敏感代码 | AI 初审→Senior 复审 |
| 测试验证 | 95% | 探索性测试、用户体验测试 | AI 执行自动化→QA 补充手工 |
| 部署上线 | 85% | 生产环境发布审批 | AI 自动部署→TL 审批发布 |
# .openclaw/workflow-approval.yaml
# 人机协同审批流配置
approval_gates:
prd_review:
description: "PRD 文档审核"
approvers:
- role: product_manager
required: true
- role: tech_lead
required: false
conditions:
- field: story_points
operator: ">"
value: 13 # 超过 13 点需要额外审核
notification:
channel: feishu
template: "请审核 PRD 文档:{{prd_url}}"
architecture_review:
description: "技术方案评审"
approvers:
- role: architect
required: true
- role: security_officer
required: true
conditions:
- field: involves_payment
operator: "=="
value: true
- field: involves_pii_data
operator: "=="
value: true
meeting_required: true
meeting_duration_minutes: 60
code_review:
description: "代码合并审核"
approvers:
- role: senior_developer
required: true
conditions:
- field: changed_files
operator: ">"
value: 10
- field: lines_changed
operator: ">"
value: 500
auto_approve_if:
- condition: test_coverage >= 90
- condition: security_scan_passed == true
production_deploy:
description: "生产环境部署审批"
approvers:
- role: tech_director
required: true
- role: ops_manager
required: true
conditions:
- field: deploy_time
operator: "not_in"
value: ["02:00-06:00"] # 禁止凌晨发布
- field: day_of_week
operator: "not_in"
value: ["Friday", "Saturday"] # 禁止周五周六发布
rollback_plan_required: true
# OpenClaw 交互式确认配置
# 在执行关键操作前暂停并等待人工确认
openclaw run backend-developer \
--input docs/api/openapi.yaml \
--output src/backend/ \
--confirm-before-execute \
--confirmation-prompt "即将生成 {{estimated_files}} 个文件,预计耗时 {{estimated_time}} 分钟,是否继续?"
# 配置自动暂停点
# ~/.openclaw/pause-points.yaml
pause_points:
- operation: "database_migration"
reason: "数据库变更不可逆,需人工确认"
timeout_minutes: 30
- operation: "production_deploy"
reason: "生产环境部署需审批"
timeout_minutes: 60
- operation: "delete_resource"
reason: "删除操作需谨慎"
timeout_minutes: 15
- operation: "external_api_call"
condition: "cost > 10" # 单次调用成本超过$10 需确认
reason: "高成本 API 调用"
timeout_minutes: 10
# 异常处理配置
# ~/.openclaw/exception-handling.yaml
exception_handlers:
- error_type: "compilation_error"
max_auto_retries: 3
after_retries: "notify_human"
notification:
channel: slack
message: "编译失败,已尝试自动修复 {{retry_count}} 次,请人工介入"
include_logs: true
- error_type: "test_failure"
failure_threshold: 0.2 # 失败率超过 20% 时告警
action: "create_jira_ticket"
ticket_template:
project: "BUG"
type: "Bug"
priority: "High"
description: |
自动化测试发现失败:
- 失败用例:{{failed_tests}}
- 错误信息:{{error_message}}
- 堆栈跟踪:{{stack_trace}}
- error_type: "deployment_failure"
action: "auto_rollback"
rollback_timeout_seconds: 300
notify_on_rollback: true
escalation:
if_rollback_fails: "page_oncall"
- error_type: "ai_hallucination"
detection_method: "consistency_check"
action: "flag_for_review"
reviewer_role: "tech_lead"
# 人工反馈收集机制
# 每次人工审核后记录反馈用于优化 AI
openclaw collect-feedback \
--task-id TASK-2026-0314-001 \
--reviewer "张三" \
--rating 4 \
--comments "代码整体质量不错,但异常处理可以更完善" \
--suggestions "建议增加全局异常处理器,统一错误响应格式"
# 定期生成优化报告
openclaw generate-optimization-report \
--period "last_30_days" \
--output reports/ai-optimization-2026-03.md
# 报告内容包括:
# - AI 生成代码采纳率统计
# - 人工修改热点分析
# - 常见错误模式识别
# - 技能包优化建议
# 1. 并行化执行
# 同时启动多个 Agents 并行工作
openclaw run backend-developer &
openclaw run frontend-developer &
openclaw run qa-engineer --type unit &
wait
# 2. 增量构建
# 只重新生成变更部分的代码
openclaw run backend-developer \
--incremental \
--changed-files $(git diff --name-only HEAD~1)
# 3. 缓存优化
# 复用已生成的代码片段
openclaw run backend-developer \
--use-cache \
--cache-dir ~/.openclaw/cache
# 4. 模型选择优化
# 简单任务用 Sonnet,复杂任务用 Opus
if [[ $COMPLEXITY == "low" ]]; then
MODEL="claude-sonnet-4.6"
else
MODEL="claude-opus-4.6"
fi
A: 建立多层质量保障机制:
A: 实施一致性验证:
A: 多维度优化策略:
A: 成本优化措施:
A: 标准化排查流程:
# Step 1: 查看 Pod 状态
kubectl get pods -n -o wide
kubectl describe pod -n
# Step 2: 查看容器日志
kubectl logs -n --previous
kubectl logs -n -c
# Step 3: 进入容器调试
kubectl exec -it -n -- /bin/sh
# Step 4: 检查事件
kubectl get events -n --sort-by='.lastTimestamp'
# Step 5: AI 辅助诊断
openclaw diagnose-k8s-issue \
--namespace \
--pod \
--since 1h
# Prometheus 监控规则
# prometheus-rules.yaml
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: ai-devops-alerts
namespace: monitoring
spec:
groups:
- name: ai_pipeline_alerts
rules:
- alert: AIPipelineHighFailureRate
expr: |
sum(rate(jenkins_build_result_total{result="FAILURE"}[5m]))
/ sum(rate(jenkins_build_result_total[5m])) > 0.2
for: 5m
labels:
severity: warning
annotations:
summary: "AI 流水线失败率过高"
description: "过去 5 分钟 AI 流水线失败率为 {{ $value | humanizePercentage }}"
- alert: AITokenBudgetExceeded
expr: |
sum(openclaw_token_usage_total) > 1000000
for: 1h
labels:
severity: critical
annotations:
summary: "AI Token 使用超出预算"
description: "本月已使用 {{ $value }} tokens,预算 100 万"
- alert: DeploymentRollbackDetected
expr: |
increase(kube_deployment_status_replicas_unavailable[5m]) > 0
for: 2m
labels:
severity: critical
annotations:
summary: "检测到部署回滚"
description: "部署 {{ $labels.deployment }} 发生回滚"
# 告警通知配置
# alertmanager-config.yaml
route:
group_by: ['alertname', 'severity']
receiver: 'feishu-notifications'
routes:
- match:
severity: critical
receiver: 'pagerduty-critical'
- match:
severity: warning
receiver: 'feishu-warnings'
receivers:
- name: 'feishu-notifications'
webhook_configs:
- url: 'https://open.feishu.cn/open-apis/bot/v2/hook/xxx'
send_resolved: true
- name: 'pagerduty-critical'
pagerduty_configs:
- service_key: 'your-pagerduty-key'
description: '{{ .CommonAnnotations.summary }}'