Files
macos-tools/devops/bookstore-cicd-setup-guide.md
gaoandClaude c6154b15fe feat: 添加完整的云原生 CI/CD 架构配置
## 新增组件
- ✅ Gitea Kubernetes 部署配置 (Helm)
- ✅ ArgoCD GitOps 应用配置
- ✅ Tekton Pipelines 完整流水线
- ✅ Tekton Triggers 自动触发
- ✅ Kubernetes 部署清单
- ✅ 安全配置和密钥管理
- ✅ 监控和可观测性配置

## 架构特点
- 🚀 云原生设计,轻量级高效
- 🔄 GitOps 最佳实践
- 🔧 自动化 CI/CD 流水线
- 🛡️ 安全扫描和权限控制
- 📊 监控和告警集成
- 📈 水平扩缩容支持

## 支持的应用
- 📚 Bookstore 智能阅读平台
- 🔧 Spring Boot + MyBatis Plus
- 🤖 AI 集成 (Ollama/OpenAI)
- 📊 OpenSearch 向量搜索
- 💾 MySQL + Redis 数据存储

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
2025-10-22 16:44:07 +08:00

6.1 KiB
Raw Permalink Blame History

Bookstore 云原生 CI/CD 设置指南

🚀 架构概览

本项目采用 云原生 CI/CD 架构:

  • 代码托管: Gitea (Kubernetes)
  • CI 流水线: Tekton Pipelines + Triggers
  • CD 部署: ArgoCD (GitOps)
  • 容器仓库: Harbor
  • 目标平台: Kubernetes

📁 配置文件结构

devops/
├── tekton/
│   ├── bookstore-pipeline.yaml      # 主流水线定义
│   ├── bookstore-tasks.yaml         # 自定义任务
│   ├── bookstore-pipelinerun.yaml   # 流水线运行示例
│   └── bookstore-triggers.yaml      # 触发器配置
├── argocd/
│   └── bookstore-application.yaml   # ArgoCD 应用配置
├── k8s/
│   ├── bookstore-deployment.yaml    # K8s 部署清单
│   └── bookstore-secrets.yaml       # 敏感信息配置
└── bookstore-cicd-setup-guide.md    # 本文档

🔧 部署步骤

1. 部署 Tekton 配置

# 应用 Tekton 任务定义
kubectl apply -f devops/tekton/bookstore-tasks.yaml

# 应用流水线定义
kubectl apply -f devops/tekton/bookstore-pipeline.yaml

# 应用触发器配置
kubectl apply -f devops/tekton/bookstore-triggers.yaml

2. 配置 Secrets

# 创建 Harbor 凭据
kubectl create secret docker-registry harbor-registry-credentials \
  --docker-server=harbor.shared:28081 \
  --docker-username=admin \
  --docker-password=Harbor12345 \
  --namespace=tekton-pipelines

# 创建 Gitea SSH 凭据
kubectl create secret generic gitea-git-credentials \
  --from-file=id_rsa=~/.ssh/id_rsa \
  --from-file=known_hosts=~/.ssh/known_hosts \
  --namespace=tekton-pipelines

# 应用应用 secrets
kubectl apply -f devops/k8s/bookstore-secrets.yaml

3. 部署 ArgoCD 配置

# 应用 ArgoCD 应用配置
kubectl apply -f devops/argocd/bookstore-application.yaml

4. 手动触发流水线

# 运行流水线
kubectl apply -f devops/tekton/bookstore-pipelinerun.yaml

# 查看流水线状态
kubectl get pipelineruns -n tekton-pipelines

# 查看日志
tkn pipelinerun logs <pipeline-run-name> -n tekton-pipelines

🔍 CI/CD 流程说明

CI 流程 (Tekton)

  1. Git Clone: 从 Gitea 拉取代码
  2. Maven Test: 运行单元测试和集成测试
  3. Maven Build: 构建 Spring Boot 应用
  4. Docker Build: 构建容器镜像
  5. Security Scan: Trivy 安全扫描
  6. Push Image: 推送镜像到 Harbor
  7. Update Manifests: 更新 GitOps 仓库中的镜像标签

CD 流程 (ArgoCD)

  1. Git Sync: ArgoCD 监控 GitOps 仓库变化
  2. Manifest Sync: 自动同步 K8s 清单到集群
  3. Health Check: 验证应用健康状态
  4. Rollback: 失败时自动回滚

🌐 访问地址

🔧 配置要点

环境变量配置

配置项 值 说明
SPRING_PROFILES_ACTIVE kubernetes Spring Boot 环境
SPRING_DATASOURCE_URL mysql.shared:3306/bookstore 数据库连接
SPRING_REDIS_HOST redis.shared Redis 连接
OLLAMA_BASE_URL http://ollama.shared:11434 AI 服务

端口映射

服务 端口 说明
Gitea 30080 Web UI
ArgoCD 30081 Web UI
Harbor 28081 Registry
Tekton Events 30090 Webhook

健康检查

  • Liveness: /actuator/health
  • Readiness: /actuator/health/readiness
  • Startup: /actuator/health (60s 超时)

🚦 触发条件

自动触发

  1. Git Push: 推送到 main 分支
  2. Tag Push: 创建新标签
  3. PR Merge: 合并 Pull Request

手动触发

# 使用 tkn CLI
tkn pipeline start bookstore-pipeline \
  --param git-url=http://gitea.gitea:3000/team/bookstore.git \
  --param git-revision=main \
  --workspace name=shared-data,volumeClaimTemplate=spec.accessModes=ReadWriteOnce,spec.resources.requests.storage=2Gi,spec.storageClassName=local-path \
  --use-param-defaults

📊 监控和日志

Prometheus 指标

  • Spring Boot Actuator: /actuator/prometheus
  • Tekton: 内置指标
  • ArgoCD: 应用状态指标

日志收集

# 查看应用日志
kubectl logs -f deployment/bookstore -n app-bookstore

# 查看 CI/CD 日志
tkn pipelinerun logs <pipeline-run-name> -f -n tekton-pipelines

# 查看 ArgoCD 日志
kubectl logs -f deployment/argocd-server -n argocd

🔒 安全配置

镜像安全

  • Trivy 扫描: 每次构建后自动扫描
  • 非 Root 用户: 容器运行用户 1000:1000
  • 只读文件系统: 生产环境建议启用

RBAC

  • 最小权限: ServiceAccount 仅需必要权限
  • 命名空间隔离: 不同环境独立命名空间
  • 密钥管理: 敏感信息使用 Kubernetes Secrets

🚀 故障排除

常见问题

  1. Pipeline 失败: 检查凭据配置
  2. 镜像拉取失败: 检查 Harbor 连接
  3. 部署失败: 检查资源限制和存储

调试命令

# 检查 Pod 状态
kubectl get pods -n app-bookstore

# 查看事件
kubectl get events -n app-bookstore --sort-by='.lastTimestamp'

# 检查资源使用
kubectl top pods -n app-bookstore

# 端口转发测试
kubectl port-forward svc/bookstore-service 8080:80 -n app-bookstore

📈 优化建议

性能优化

  1. 并行构建: Tekton 支持任务并行执行
  2. 缓存策略: Maven 依赖缓存
  3. 镜像优化: 多阶段构建减小镜像大小

可观测性

  1. 分布式追踪: 集成 Jaeger
  2. APM: 集成 New Relic/DataDog
  3. 告警: 配置 AlertManager

🔄 迁移说明

从 GitLab CI/CD 迁移到云原生架构的优势:

  1. 资源节省: 约 60-70% 内存节省
  2. 云原生: 符合 Kubernetes 生态最佳实践
  3. 可扩展: 组件可独立扩展
  4. 标准: 开源标准,避免厂商锁定

注意: 部署前请确保所有基础组件(Gitea、Harbor、MySQL、Redis)已正常运行。