🚀 CI/CD 自动部署模块运维手册

基于 OpenClaw + Claude Code 的端到端研发自动化系统

版本:v1.0.0 | 更新日期:2026-03-18 | 状态:生产就绪

📋 系统概述

💡 提示:本系统整合了 OpenClaw 工作流引擎、Claude Code AI 编程助手、Jenkins CI/CD、Docker 容器化、Kubernetes 编排,实现从需求到部署的全流程自动化。

核心特性

工作流程

需求输入
PM Agent
生成 PRD
Architect Agent
技术方案
Dev Agent
AI 编码
QA Agent
测试
Jenkins CI/CD
K8s 部署
UI 验收

核心组件

组件 版本 用途 端口
OpenClaw v2.0+ 工作流编排引擎 8080
Claude Code API Latest AI 编程服务 443
Jenkins v2.400+ CI/CD 流水线 8081
Kubernetes v1.28+ 容器编排 6443
KubeSphere v3.4+ K8s 管理平台 30880
Prometheus v2.45+ 指标监控 9090
Grafana v10.0+ 可视化面板 3000

关键指标

99.99%
系统可用性
<200ms
P99 响应延迟
80%+
测试覆盖率
1000+
并发请求/秒

🏗️ 系统架构

架构分层

🖥️ 用户交互层 Web/CLI/API

提供多种访问方式:Web Portal、CLI Tool、API Gateway、IDE Plugin

  • RESTful API
  • WebSocket 实时通信
  • GraphQL 查询
🤖 AI Agents 协作层 7 大 Agent

多角色 AI Agent 协同工作

  • PM Agent - 产品需求分析
  • Architect Agent - 技术方案设计
  • Dev Agent - 前后端开发
  • QA Agent - 测试用例生成
  • DevOps Agent - 部署运维
  • UI Test Agent - 自动化验收
⚙️ 工作流编排层 OpenClaw

OpenClaw 工作流引擎负责任务调度和流程编排

  • 流程定义与管理
  • 状态跟踪
  • 事件处理
  • 任务调度
🔄 CI/CD 流水线层 Jenkins

自动化构建、测试、部署流水线

  • 代码构建
  • 单元测试
  • 集成测试
  • 安全扫描
  • 镜像构建
  • 自动部署
🐳 容器编排层 Kubernetes

基于 K8s 的容器编排和管理

  • 自动扩缩容
  • 负载均衡
  • 自我修复
  • 滚动更新
💾 基础设施层 Cloud Native

底层基础设施支撑

  • Docker 容器
  • 分布式存储
  • 软件定义网络
  • 监控系统

数据流设计

需求输入
PM Agent
PRD 存储
Architect Agent
技术设计
API 规范
Dev Agent
源代码
QA Agent
测试报告
DevOps Agent
镜像仓库
K8s 集群
UI Test Agent
验收报告

数据存储方案

数据类型 存储方案 保留策略
PRD 文档 MongoDB / MinIO 永久
技术设计 MongoDB / MinIO 永久
源代码 Git Repository 永久
构建产物 Nexus / Artifactory 180 天
Docker 镜像 Harbor / Docker Registry 90 天
测试报告 Elasticsearch 365 天
日志 ELK Stack 30 天
监控指标 Prometheus 15 天

🚀 部署指南

⚠️ 注意:部署前请确保已满足所有前置条件,包括硬件资源、软件依赖和网络配置。

环境准备

硬件资源要求(生产环境)

组件 CPU 内存 存储 节点数
K8s Master 8 核 16GB 200GB 3 (HA)
K8s Worker 16 核 32GB 500GB 5+
Jenkins 8 核 16GB 200GB 2 (HA)
Harbor 8 核 16GB 2TB 2 (HA)

Kubernetes 集群部署

# Master 节点初始化
kubeadm init \
  --pod-network-cidr=10.244.0.0/16 \
  --service-cidr=10.96.0.0/12 \
  --apiserver-advertise-address=192.168.1.10

# 配置 kubectl
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

# Worker 节点加入
kubeadm join 192.168.1.10:6443 \
  --token <token> \
  --discovery-token-ca-cert-hash sha256:<hash>

Jenkins 部署

# 添加 Jenkins Helm 仓库
helm repo add jenkins https://charts.jenkins.io
helm repo update

# 创建命名空间
kubectl create namespace jenkins

# 安装 Jenkins
helm install jenkins jenkins/jenkins \
  -n jenkins \
  -f jenkins-values.yaml

Harbor 镜像仓库部署

# 下载 Harbor 安装包
wget https://github.com/goharbor/harbor/releases/download/v2.9.0/harbor-offline-installer-v2.9.0.tgz
tar xvf harbor-offline-installer-v2.9.0.tgz
cd harbor

# 编辑 harbor.yml 并安装
./install.sh

验证部署

✅ 检查清单:
  • kubectl get nodes - 所有节点 Ready
  • kubectl get pods -n jenkins - Jenkins Pod Running
  • kubectl get pods -n monitoring - 监控组件 Running
  • 访问 Jenkins Web UI - 正常登录
  • 访问 Harbor Web UI - 正常登录

⚙️ CI/CD 配置

Jenkins Pipeline 阶段

Checkout
Code Analysis
Unit Test
Integration Test
Security Scan
Build Image
Push Image
Deploy

Pipeline 配置示例

pipeline {
    agent any
    
    environment {
        REGISTRY = 'harbor.auto-research.example.com'
        IMAGE_NAME = 'auto-research/myapp'
    }
    
    stages {
        stage('Checkout') {
            steps {
                checkout scm
            }
        }
        
        stage('Code Analysis') {
            steps {
                withSonarQubeEnv('SonarQube') {
                    sh 'mvn clean sonar:sonar'
                }
            }
        }
        
        stage('Unit Test') {
            steps {
                sh 'mvn test'
            }
            post {
                always {
                    junit '**/target/surefire-reports/*.xml'
                }
            }
        }
        
        stage('Build Docker Image') {
            steps {
                script {
                    docker.build("${REGISTRY}/${IMAGE_NAME}:${BUILD_ID}")
                }
            }
        }
        
        stage('Push Image') {
            steps {
                script {
                    docker.withRegistry("https://${REGISTRY}", 'credentials-id') {
                        docker.image("${REGISTRY}/${IMAGE_NAME}:${BUILD_ID}").push()
                    }
                }
            }
        }
        
        stage('Deploy to K8S') {
            steps {
                sh 'kubectl apply -f k8s/deployment.yaml'
                sh 'kubectl rollout status deployment/myapp'
            }
        }
    }
}
# Build stage
FROM maven:3.9-eclipse-temurin-17 AS builder
WORKDIR /build
COPY pom.xml .
RUN mvn dependency:go-offline -B
COPY src ./src
RUN mvn clean package -DskipTests -B

# Runtime stage
FROM eclipse-temurin:17-jre-alpine
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
WORKDIR /app
COPY --from=builder /build/target/*.jar app.jar
USER appuser
HEALTHCHECK --interval=30s --timeout=3s \
  CMD curl -f http://localhost:8080/health || exit 1
ENTRYPOINT ["java", "-jar", "app.jar"]
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
  namespace: auto-research-prod
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: harbor.auto-research.example.com/auto-research/myapp:latest
        ports:
        - containerPort: 8080
        resources:
          requests:
            cpu: "500m"
            memory: "512Mi"
          limits:
            cpu: "2000m"
            memory: "2Gi"
        livenessProbe:
          httpGet:
            path: /health/live
            port: 8080
          initialDelaySeconds: 60
          periodSeconds: 10

部署策略

策略 描述 适用场景 风险
滚动更新 逐步替换旧版本 Pod 常规发布
蓝绿部署 同时运行两个版本,切换流量 重大版本更新 极低
金丝雀发布 先发布少量实例,逐步扩大 高风险变更

🔧 日常运维

系统启停

# 启动顺序
kubectl apply -f /opt/auto-research/core-services/
kubectl get pods -n auto-research-system
kubectl apply -f /opt/auto-research/applications/

# 停止顺序
kubectl delete -f /opt/auto-research/applications/
kubectl delete -f /opt/auto-research/core-services/

应用部署

# 更新镜像版本
kubectl set image deployment/myapp \
  myapp=harbor.example.com/myapp:v1.2.0 \
  -n auto-research-prod

# 查看部署状态
kubectl rollout status deployment/myapp -n auto-research-prod

# 回滚
kubectl rollout undo deployment/myapp -n auto-research-prod

# 查看历史
kubectl rollout history deployment/myapp -n auto-research-prod

日志管理

# 查看 Pod 日志
kubectl logs myapp-5d8c9f7b6-x2k4m -n auto-research-prod

# 实时跟踪日志
kubectl logs -f myapp-5d8c9f7b6-x2k4m -n auto-research-prod

# 搜索错误日志
kubectl logs myapp-pod -n auto-research-prod | grep "ERROR"

扩缩容操作

# 手动扩缩容
kubectl scale deployment myapp --replicas=10 -n auto-research-prod

# 查看 HPA 状态
kubectl get hpa -n auto-research-prod

# 编辑 HPA
kubectl edit hpa myapp-hpa -n auto-research-prod

常用命令速查

📈 监控告警

关键监控指标

指标类别 指标名称 告警阈值 优先级
节点资源 CPU 使用率 > 80% 警告
内存使用率 > 85% 警告
磁盘使用率 > 80% 严重
应用指标 HTTP 错误率 > 5% 严重
P99 延迟 > 2s 警告
K8s 指标 Pod 重启次数 > 5 次/15min 严重
CI/CD 指标 构建失败率 > 10% 警告

告警规则配置

groups:
- name: auto-research-alerts
  rules:
  - alert: HighCPUUsage
    expr: 100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "节点 {{ $labels.instance }} CPU 使用率过高"
      description: "CPU 使用率:{{ $value }}%"
  
  - alert: PodCrashLooping
    expr: rate(kube_pod_container_status_restarts_total[15m]) * 60 * 5 > 0
    for: 15m
    labels:
      severity: critical
    annotations:
      summary: "Pod {{ $labels.namespace }}/{{ $labels.pod }} 频繁重启"

通知渠道

📧 Email

dev-team@example.com

oncall@example.com

💬 Slack

#ci-cd-notifications

#critical-alerts

📱 PagerDuty

On-call 轮值

紧急告警

🔍 故障排查

🚨 紧急情况:如遇到生产环境严重故障,请立即联系 On-call 工程师并启动应急预案。

常见问题诊断

Pod 无法启动

# 1. 查看 Pod 状态
kubectl get pod <pod-name> -n <namespace>

# 2. 查看详情
kubectl describe pod <pod-name> -n <namespace>

# 3. 查看日志
kubectl logs <pod-name> -n <namespace>

# 4. 进入容器调试
kubectl exec -it <pod-name> -n <namespace> -- /bin/sh

Service 无法访问

# 检查 Service 和 Endpoints
kubectl get svc <service-name> -n <namespace>
kubectl get endpoints <service-name> -n <namespace>

# 检查 Pod 标签匹配
kubectl get pods -n <namespace> --show-labels

# 测试连通性
kubectl run -it --rm debug --image=busybox --restart=Never -n <namespace> -- \
  nslookup <service-name>.<namespace>.svc.cluster.local

Jenkins Pipeline 失败

排查步骤:
  1. 查看构建控制台输出
  2. 检查 Jenkins Agent 状态
  3. 验证凭证配置
  4. 检查资源配额
  5. 重放失败的 Pipeline

故障排查工具箱

🤖 Agents 配置

研发角色 Agents

📋 PM Agent 产品

负责需求分析和 PRD 生成

  • 需求分析
  • PRD 文档生成
  • 用户故事映射
  • 优先级排序
🏗️ Architect Agent 架构

负责技术方案设计

  • 系统架构设计
  • 技术选型
  • API 设计
  • 架构文档编写
💻 Dev Agent 开发

负责前后端开发

  • 前端 UI 开发
  • 后端 API 开发
  • 业务逻辑实现
  • 单元测试编写
✅ QA Agent 测试

负责测试用例生成

  • 测试用例生成
  • 单元测试创建
  • 集成测试
  • 质量保证
🚀 DevOps Agent 运维

负责部署和运维

  • CI/CD 配置
  • 容器化
  • K8s 部署
  • 监控设置
🎨 UI Test Agent UI 测试

负责 UI 自动化验收

  • E2E 测试创建
  • UI 验证
  • 无障碍测试
  • 性能测试

Agent 协作流程

PM Agent
需求分析
Architect Agent
技术设计
Dev Agent
编码实现
QA Agent
测试验证
DevOps Agent
部署发布
UI Test Agent
验收测试

人机协同配置

👥 人工审核点:
  • PRD 审批 - 产品总监、技术负责人
  • 架构评审 - 首席架构师、安全团队
  • 生产部署 - 发布经理、值班工程师
  • 验收签字 - 产品负责人、关键干系人