1. 基础架构:GitLab + Kubernetes
1.1 GitLab CI/CD核心配置
GitLab通过.gitlab-ci.yml
定义流水线阶段。以下是一个基础模板:
stages:
- build
- test
- deploy
build_job:
stage: build
script:
- echo "Compiling the code..."
- make build
test_job:
stage: test
script:
- echo "Running tests..."
- make test
deploy_job:
stage: deploy
script:
- echo "Deploying to Kubernetes..."
- kubectl apply -f k8s/
1.2 Kubernetes部署策略
K8s的滚动更新(Rolling Update)确保零停机部署:
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
2. 智能优化:AIOps与自动化决策
2.1 基于日志的智能回滚
通过分析Pod日志,自动触发回滚(示例逻辑):
python
# 伪代码:异常检测与回滚
def check_logs_and_rollback():
logs = get_pod_logs("my-app")
if "OutOfMemoryError" in logs:
kubectl("rollout undo deployment/my-app")
2.2 测试覆盖率自动化提升
结合Jaeger和Prometheus监控,动态调整测试范围:
指标 | 优化策略 |
---|---|
单元测试覆盖率 < 80% | 阻塞合并请求 |
集成测试失败率 > 5% | 自动扩展测试节点 |
3. 实战案例:5分钟构建完整流水线
3.1 步骤概览
- 代码提交 → 触发GitLab流水线
- 构建镜像 → 推送至Docker Registry
- 部署到K8s → 自动健康检查
- 监控反馈 → 异常时回滚
3.2 关键代码:动态扩缩容
根据CPU负载自动调整副本数:
bash
# 使用K8s HPA(Horizontal Pod Autoscaler)
kubectl autoscale deployment my-app --cpu-percent=50 --min=2 --max=10
4. 避坑指南:常见问题与解决
问题 | 原因 | 解决方案 |
---|---|---|
流水线卡在Pending | 资源不足 | 增加GitLab Runner |
部署超时 | 镜像拉取慢 | 使用本地Registry缓存 |
测试偶发性失败 | 环境差异 | 容器化测试依赖 |
未来趋势:Serverless CI/CD
- 无服务器构建(如AWS CodeBuild)
- AI预测性测试(提前发现高风险变更)
- 多云部署编排(一键同步到AWS/GCP/Azure)
讨论:你的团队CI/CD遇到过哪些挑战?欢迎分享案例!