## 新增组件 - ✅ 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]>
6.1 KiB
6.1 KiB
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)
- Git Clone: 从 Gitea 拉取代码
- Maven Test: 运行单元测试和集成测试
- Maven Build: 构建 Spring Boot 应用
- Docker Build: 构建容器镜像
- Security Scan: Trivy 安全扫描
- Push Image: 推送镜像到 Harbor
- Update Manifests: 更新 GitOps 仓库中的镜像标签
CD 流程 (ArgoCD)
- Git Sync: ArgoCD 监控 GitOps 仓库变化
- Manifest Sync: 自动同步 K8s 清单到集群
- Health Check: 验证应用健康状态
- Rollback: 失败时自动回滚
🌐 访问地址
- Gitea: http://localhost:30080
- ArgoCD: http://localhost:30081 (admin /
cmBjoF-pKT0izNQw) - Harbor: http://localhost:28081 (admin / Harbor12345)
- Tekton Dashboard: 需要额外部署
- Bookstore 应用: http://bookstore.local.lan (通过 Traefik)
🔧 配置要点
环境变量配置
| 配置项 | 值 | 说明 |
|---|---|---|
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 超时)
🚦 触发条件
自动触发
- Git Push: 推送到
main分支 - Tag Push: 创建新标签
- 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
🚀 故障排除
常见问题
- Pipeline 失败: 检查凭据配置
- 镜像拉取失败: 检查 Harbor 连接
- 部署失败: 检查资源限制和存储
调试命令
# 检查 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
📈 优化建议
性能优化
- 并行构建: Tekton 支持任务并行执行
- 缓存策略: Maven 依赖缓存
- 镜像优化: 多阶段构建减小镜像大小
可观测性
- 分布式追踪: 集成 Jaeger
- APM: 集成 New Relic/DataDog
- 告警: 配置 AlertManager
🔄 迁移说明
从 GitLab CI/CD 迁移到云原生架构的优势:
- 资源节省: 约 60-70% 内存节省
- 云原生: 符合 Kubernetes 生态最佳实践
- 可扩展: 组件可独立扩展
- 标准: 开源标准,避免厂商锁定
注意: 部署前请确保所有基础组件(Gitea、Harbor、MySQL、Redis)已正常运行。