以下是企业级 CI/CD 架构图说明 和 部署模板,适用于使用 Gerrit + Jenkins + Docker + Kubernetes 的现代化开发流程。
🧭 企业级 CI/CD 架构图说明
┌────────────────────────────────────────────────────────────┐
│ 开发者提交代码 │
│ git push → Gerrit (refs/for/master) │
└────────────────────────────────────────────────────────────┘
↓
┌────────────────────────────────────────────────────────────┐
│ Gerrit 审查系统 │
│ - 创建 Change(变更) │
│ - 审查者评分、评论 │
│ - 触发 Jenkins 构建(Patchset Created) │
└────────────────────────────────────────────────────────────┘
↓
┌────────────────────────────────────────────────────────────┐
│ Jenkins CI │
│ - 拉取代码 │
│ - 执行构建脚本(Maven/Gradle/NPM 等) │
│ - 单元测试、静态分析 │
│ - 构建 Docker 镜像 │
│ - 推送镜像到镜像仓库(如 Harbor 或 DockerHub) │
└────────────────────────────────────────────────────────────┘
↓
┌────────────────────────────────────────────────────────────┐
│ Kubernetes CD(部署阶段) │
│ - Jenkins 调用 kubectl 或 Helm 部署至 K8s 集群 │
│ - 自动化滚动更新 │
│ - Prometheus + Grafana 监控服务状态 │
└────────────────────────────────────────────────────────────┘
📦 部署模板(组件清单)
1. Gerrit 代码审查系统
- 部署方式:Docker 或 Linux 原生安装
- 端口:8080(HTTP),29418(SSH)
- 用户认证:LDAP / OAuth / 本地账户
- 审查流程:
refs/for/master
推送触发审查
2. Jenkins 持续集成
- 部署方式:Docker 或 Kubernetes
插件:
- Gerrit Trigger Plugin
- Git Plugin
- Pipeline Plugin
- 构建脚本:Jenkinsfile(Groovy DSL)
3. Docker 镜像构建与仓库
- 构建工具:Dockerfile
- 镜像仓库:Harbor(推荐企业私有)或 DockerHub
- 安全策略:镜像签名、扫描漏洞
4. Kubernetes 持续部署
- 部署工具:kubectl、Helm
- 环境隔离:dev / staging / production 命名空间
- 自动化策略:滚动更新、回滚、探针检测
5. 监控与告警
- Prometheus:采集指标
- Grafana:可视化仪表盘
- Alertmanager:告警通知(邮件、Slack)
✅ 企业落地建议
项目 | 建议 |
---|---|
安全性 | 使用 RBAC 控制 Jenkins 与 K8s 权限 |
审查流程 | Gerrit 审查通过后再触发部署 |
构建隔离 | 使用 Jenkins Agent 执行构建任务 |
镜像管理 | 定期清理旧版本,启用漏洞扫描 |
灰度发布 | 使用 K8s 的 Canary 或 Blue-Green 策略 |
Gerrit 部署教程
🧱 一、环境准备
✅ 系统要求
- 操作系统:Ubuntu 20.04 / 22.04(其他 Linux 发行版也可)
必备组件:
- Git:
sudo apt install git
- Java JDK(推荐 OpenJDK 11):
sudo apt install openjdk-11-jdk
- SSH 服务(用于代码推送):
sudo apt install openssh-server
- Git:
📦 二、创建 Gerrit 用户与目录
sudo adduser gerrit
sudo su gerrit
cd /home/gerrit
mkdir review_site
📥 三、下载并初始化 Gerrit
wget https://gerrit-releases.storage.googleapis.com/gerrit-3.7.0.war
java -jar gerrit-3.7.0.war init -d review_site
安装过程中会提示配置项,推荐如下:
配置项 | 推荐设置 |
---|---|
Git 仓库路径 | 默认即可 |
Web 服务器类型 | JETTY (Gerrit 内建) |
HTTP 端口 | 默认 8080 |
SSH 端口 | 默认 29418 |
用户认证方式 | OpenID 或 HTTP (可选) |
是否启用邮件通知 | 可跳过或配置 SMTP |
是否启用代码审查标签 | 选择 y |
🚀 四、启动与管理 Gerrit
cd ~/review_site/bin
./gerrit.sh start # 启动服务
./gerrit.sh stop # 停止服务
./gerrit.sh restart # 重启服务
访问地址:http://<服务器IP>:8080
👨💻 五、开发者使用流程
1. 上传 SSH 公钥
- 登录 Gerrit Web UI
- 进入用户设置 → SSH Keys → 添加公钥
2. 克隆项目仓库
git clone ssh://<user>@<server-ip>:29418/<project-name>
3. 提交代码并推送审查
git checkout -b feature-branch
git add .
git commit -m "Add new feature"
git push origin HEAD:refs/for/master
📌 补充说明
- Gerrit 内建 Jetty Web 服务,默认监听 8080,无需 Nginx。
- 若需启用 HTTPS,可配置 Jetty 的 SSL 证书(非必须)。
- 若后续需要负载均衡或统一入口,再考虑引入 Nginx。
Nginx作为 Gerrit 的反向代理或负载均衡器
🧭 为什么将 Nginx 与 Gerrit 分离部署?
✅ 优势一:安全隔离
- Nginx 作为前端网关,暴露公网端口。
- Gerrit 作为后端服务,仅在内网运行,减少攻击面。
✅ 优势二:负载均衡与高可用
- Nginx 可代理多个 Gerrit 实例,实现负载均衡。
- 可结合 Keepalived 实现高可用架构。
✅ 优势三:统一入口与证书管理
- Nginx 统一处理 HTTPS 证书(如 Let's Encrypt)。
- 可配置 URL 重写、访问控制、缓存策略。
🛠️ 架构示意图
[开发者浏览器]
↓
HTTPS 443
↓
┌──────────────┐
│ Nginx 服务器 │ ← 公网访问
└──────────────┘
↓
HTTP 8081
↓
┌──────────────┐
│ Gerrit 服务器 │ ← 内网部署
└──────────────┘
⚙️ Nginx 配置示例(部署在独立服务器)
server {
listen 443 ssl;
server_name gerrit.yourdomain.com;
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
location / {
proxy_pass http://gerrit.internal.ip:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
📌 注意事项
项目 | 建议 |
---|---|
网络连接 | 确保 Nginx 能访问 Gerrit 内网地址 |
认证方式 | Gerrit 配置为 HTTP 模式,使用 Nginx 处理认证 |
端口管理 | Gerrit 可监听 8081,Nginx 监听 443/80 |
日志分析 | Nginx 可记录访问日志,便于审计与监控 |