以下是企业级 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 部署教程
🧱 一、准备环境
✅ 安装 Java 17(推荐使用 Adoptium Temurin)
wget https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.10%2B7/OpenJDK17U-jdk_x64_linux_hotspot_17.0.10_7.tar.gz
tar -xzf OpenJDK17U-jdk_x64_linux_hotspot_17.0.10_7.tar.gz
sudo mv jdk-17.0.10+7 /opt/java17
echo 'export JAVA_HOME=/opt/java17' >> ~/.bashrc
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
java -version
确认输出为 Java 17。
📦 二、下载 Gerrit 3.9.9 安装包
wget https://gerrit-releases.storage.googleapis.com/gerrit-3.9.9.war
📁 三、初始化 Gerrit 站点
mkdir ~/gerrit_site
java -jar gerrit-3.9.9.war init --batch -d ~/gerrit_site
你将看到一系列配置提示:
- Reverse Proxy:根据是否使用 Nginx 选择 y或N
- Canonical URL:填写实际访问地址,如 http://10.1.1.28:8080/
- Authentication method:建议选择 DEVELOPMENT_BECOME_ANY_ACCOUNT或LDAP(如你已部署 LDAP)
🔄 四、启动 Gerrit 服务
~/gerrit_site/bin/gerrit.sh start
访问地址:
http://<你的服务器IP>:8080
🔐 五、配置用户认证(可选)
✅ 使用开发模式登录
编辑配置文件:
[auth]
    type = DEVELOPMENT_BECOME_ANY_ACCOUNT
重启服务后可直接选择用户名登录。
✅ 使用 LDAP 登录(如已部署)
[auth]
    type = LDAP
    gitBasicAuth = true
[ldap]
    server = ldap://localhost
    accountBase = ou=users,dc=myorg,dc=local
    accountPattern = (&(objectClass=inetOrgPerson)(uid=${username}))
    username = cn=admin,dc=myorg,dc=local
    password = <你的LDAP密码>
🔌 六、常用插件安装(可选)
cd ~/gerrit_site/plugins
wget https://gerrit-ci.gerritforge.com/view/Plugins/job/plugin-replication-bazel-master/lastSuccessfulBuild/artifact/bazel-bin/plugins/replication/replication.jar
然后重启服务。
📌 七、常用命令
| 命令 | 说明 | 
|---|---|
| gerrit.sh start | 启动服务 | 
| gerrit.sh stop | 停止服务 | 
| gerrit.sh restart | 重启服务 | 
| gerrit.sh status | 查看状态 | 
👨💻 八、开发者使用流程
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 可记录访问日志,便于审计与监控 | 
Gerrit Trigger 插件介绍
Gerrit Trigger 插件的核心作用是:当 Gerrit 中发生代码审查事件时,自动触发 Jenkins 构建任务,实现持续集成流程自动化。
🔧 插件主要功能
- 自动触发 Jenkins 构建 - 当 Gerrit 中创建新的 Patch Set(代码提交)时,自动触发 Jenkins Job。
- 支持多种事件类型:如 Patchset Created、Change Merged、Comment Added 等。
 
- 精准匹配项目与分支 - 可配置 Gerrit 项目名、分支名、路径等触发条件,支持正则表达式。
- 例如:只在 refs/heads/master分支提交时触发构建。
 
- 构建结果反馈到 Gerrit - Jenkins 构建完成后,会将结果(成功/失败)反馈到 Gerrit 的代码审查页面。
- 可配置投票等级,如 Verified +1/-1。
 
- 支持静默期(Silent Period) - 可设置等待时间,避免频繁触发构建,适合高频提交场景。
 
- 支持多 Gerrit Server 配置 - 可同时连接多个 Gerrit 实例,适用于大型企业或多项目环境。
 
- 事件监听机制 - 插件通过 SSH 连接 Gerrit,监听 stream-events实时事件流,确保触发及时可靠。
 
- 插件通过 SSH 连接 Gerrit,监听 
🚀 使用场景示例
| Gerrit事件类型 | Jenkins行为 | 
|---|---|
| Patchset Created | 自动触发构建 | 
| Change Merged | 执行部署或发布任务 | 
| Comment Added | 根据评论内容触发特定构建 | 
📌 配置建议
- 在 Gerrit 中创建专用 Jenkins 用户,并配置 SSH 公钥。
- 将该用户加入 Gerrit 的 Service Users或Non-Interactive Users组。
- 在 Jenkins 中配置 Gerrit Server 地址、端口、认证方式。
- 在 Job 中添加 “Gerrit Trigger” 构建触发器,并设置项目匹配规则。
以下是我成功配置 Jenkins 与 Gerrit Trigger 插件的完整文档汇总:
🧩 Jenkins 与 Gerrit Trigger 插件集成配置文档(适用于 LDAP 用户)
📦 一、插件安装
- 登录 Jenkins 管理后台。
- 进入 插件管理 → 可选插件。
- 搜索并安装 Gerrit Trigger Plugin。
- 安装完成后重启 Jenkins。
🔐 二、Jenkins 主机 SSH 密钥配置
- 使用 Jenkins 用户生成 SSH 密钥: - sudo -u jenkins ssh-keygen -t rsa -b 4096 -f /var/lib/jenkins/.ssh/id_rsa
- 设置权限: - sudo chown -R jenkins:jenkins /var/lib/jenkins/.ssh sudo chmod 700 /var/lib/jenkins/.ssh sudo chmod 600 /var/lib/jenkins/.ssh/id_rsa
🧑💼 三、Gerrit 上配置 LDAP 用户 jenkins-bot
假设 Gerrit 使用 LDAP 认证,
jenkins-bot是 LDAP 中的系统用户。
1. 激活用户
- 让 jenkins-bot登录一次 Gerrit Web UI,或通过 REST API 激活。
2. 添加 SSH 公钥
- 登录 Gerrit Web UI → Settings→SSH Public Keys。
- 粘贴 Jenkins 主机上的 id_rsa.pub内容。
3. 分配权限组
将 jenkins-bot 添加至以下权限组(或等效自定义组):
| 权限组名称 | 作用说明 | 
|---|---|
| Non-Interactive Users | 禁用 shell,适合机器人账户 | 
| Service Users | 系统集成用户基本权限 | 
| Stream Events Access | 允许执行 stream-events命令 | 
| Verified Label Access | 构建结果反馈 Gerrit(+1/-1) | 
4. jenkins服务器上验证连接
sudo -u jenkins ssh -i /var/lib/jenkins/.ssh/id_rsa jenkins-bot@<gerrit-host> -p 29418
确认能看到 Gerrit 欢迎信息。
⚙️ 四、Jenkins 配置 Gerrit Server
- 进入 Jenkins → 系统管理 → Gerrit Trigger → Global Configuration。
- 添加 Gerrit Server: - 名称:如 Gerritserver
- 主机地址:Gerrit地址如 10.1.19.28
- 端口:29418
- 用户名:jenkins-bot
- 私钥路径:/var/lib/jenkins/.ssh/id_rsa
 
- 名称:如 
- 设置线程参数: - 接收线程数:3
- 发送线程数:1
- 缓存过期时间:360
 
- 保存配置并确认状态为 ✅。
🧪 五、配置 Jenkins Job 触发器
- 创建或编辑 Jenkins Job。
- 在“构建触发器”中勾选 Gerrit Trigger。
- 配置触发条件: - 项目名(支持正则)
- 分支名(如 refs/heads/master)
- 事件类型(如 Patchset Created)
 
- 可选:配置构建结果反馈 Gerrit: - 设置 Verified标签权限
- 构建后步骤中添加反馈动作
 
- 设置 
✅ 六、验证集成效果
- 在 Gerrit 提交一个新的 Patchset。
- Jenkins 自动触发对应 Job。
- 构建完成后,结果反馈至 Gerrit 审查页面(如 Verified +1)。
✅ Jenkins 与 Gerrit 集成测试案例
🧭 一、环境准备
1. Gerrit 服务器配置
- 地址:http://10.1.19.28:8080
- 创建项目:test
- 创建用户:jenkins-bot
- 为 - jenkins-bot添加 SSH 公钥:- 登录 Gerrit → Settings → SSH Public Keys → 添加 id_rsa.pub内容
 
- 登录 Gerrit → Settings → SSH Public Keys → 添加 
2. Jenkins 环境配置
- 安装插件: - Gerrit Trigger
- Gerrit Code Review Plugin
 
- 创建 Freestyle 项目:gerrit-test-job
- 配置 SSH: - Jenkins 使用 jenkins-bot用户的id_rsa私钥连接 Gerrit
- 测试连接: - ssh -p 29418 jenkins-bot@10.1.19.28
 
- Jenkins 使用 
🛠 二、Jenkins 项目配置
1. 启用 Gerrit Trigger
- 勾选 “Gerrit Trigger”
- Gerrit 服务器配置: - Host: 10.1.19.28
- Port: 29418
- Username: jenkins-bot
- SSH Key: 指向 id_rsa文件路径
 
- Host: 
2. 配置触发器
- Gerrit 项目:test
- 分支:refs/heads/master
- 事件类型:Patchset Created
3. 构建步骤
- 添加 Shell 构建命令: - echo "开始构建 Gerrit Patchset" echo "构建成功"
4. 构建结果反馈
- 成功时: - Verified: +1
- Message: 构建成功,验证通过
 
- 失败时: - Verified: -1
- Message: 构建失败,请检查日志
 
🧪 三、测试流程
1. 克隆项目代码
git clone ssh://jenkins-bot@10.1.19.28:29418/test.git
cd test
2. 切换到代码分支
git checkout master
3. 修改文件并提交
echo "测试 Jenkins 构建" >> README.md
git add README.md
git commit -m "Update README for Jenkins test"
4. 推送到 Gerrit 进行评审
git push origin HEAD:refs/for/master
✅ 四、验证结果
1. Jenkins 构建日志显示:
Gerrit Trigger: Received Patchset Created event
开始构建 Gerrit Patchset
构建成功
2. Gerrit 页面显示:
- Patchset 被成功创建
- Jenkins 自动打标签: - Verified: +1
- Message: 构建成功,验证通过
 
🎉 测试成功标志
| 项目 | 状态 | 
|---|---|
| SSH 连接验证 | ✅ 成功 | 
| Jenkins 构建触发 | ✅ 成功 | 
| 构建日志输出 | ✅ 正常 | 
| Gerrit Patchset 打标签 | ✅ Verified +1 |