以下是企业级 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 选择 yN
  • Canonical URL:填写实际访问地址,如 http://10.1.1.28:8080/
  • Authentication method:建议选择 DEVELOPMENT_BECOME_ANY_ACCOUNTLDAP(如你已部署 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 CreatedChange MergedComment Added 等。
  • 精准匹配项目与分支

    • 可配置 Gerrit 项目名、分支名、路径等触发条件,支持正则表达式。
    • 例如:只在 refs/heads/master 分支提交时触发构建。
  • 构建结果反馈到 Gerrit

    • Jenkins 构建完成后,会将结果(成功/失败)反馈到 Gerrit 的代码审查页面。
    • 可配置投票等级,如 Verified +1/-1
  • 支持静默期(Silent Period)

    • 可设置等待时间,避免频繁触发构建,适合高频提交场景。
  • 支持多 Gerrit Server 配置

    • 可同时连接多个 Gerrit 实例,适用于大型企业或多项目环境。
  • 事件监听机制

    • 插件通过 SSH 连接 Gerrit,监听 stream-events 实时事件流,确保触发及时可靠。

🚀 使用场景示例

Gerrit事件类型 Jenkins行为
Patchset Created 自动触发构建
Change Merged 执行部署或发布任务
Comment Added 根据评论内容触发特定构建

📌 配置建议

  • 在 Gerrit 中创建专用 Jenkins 用户,并配置 SSH 公钥。
  • 将该用户加入 Gerrit 的 Service UsersNon-Interactive Users 组。
  • 在 Jenkins 中配置 Gerrit Server 地址、端口、认证方式。
  • 在 Job 中添加 “Gerrit Trigger” 构建触发器,并设置项目匹配规则。

以下是我成功配置 Jenkins 与 Gerrit Trigger 插件的完整文档汇总:

🧩 Jenkins 与 Gerrit Trigger 插件集成配置文档(适用于 LDAP 用户)

📦 一、插件安装

  1. 登录 Jenkins 管理后台。
  2. 进入 插件管理可选插件
  3. 搜索并安装 Gerrit Trigger Plugin
  4. 安装完成后重启 Jenkins。

🔐 二、Jenkins 主机 SSH 密钥配置

  1. 使用 Jenkins 用户生成 SSH 密钥:

    sudo -u jenkins ssh-keygen -t rsa -b 4096 -f /var/lib/jenkins/.ssh/id_rsa
    
  2. 设置权限:

    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 → SettingsSSH 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

  1. 进入 Jenkins → 系统管理 → Gerrit Trigger → Global Configuration。
  2. 添加 Gerrit Server:

    • 名称:如 Gerritserver
    • 主机地址:Gerrit地址如 10.1.19.28
    • 端口:29418
    • 用户名:jenkins-bot
    • 私钥路径:/var/lib/jenkins/.ssh/id_rsa
  3. 设置线程参数:

    • 接收线程数:3
    • 发送线程数:1
    • 缓存过期时间:360
  4. 保存配置并确认状态为 ✅。

🧪 五、配置 Jenkins Job 触发器

  1. 创建或编辑 Jenkins Job。
  2. 在“构建触发器”中勾选 Gerrit Trigger
  3. 配置触发条件:

    • 项目名(支持正则)
    • 分支名(如 refs/heads/master
    • 事件类型(如 Patchset Created)
  4. 可选:配置构建结果反馈 Gerrit:

    • 设置 Verified 标签权限
    • 构建后步骤中添加反馈动作

✅ 六、验证集成效果

  1. 在 Gerrit 提交一个新的 Patchset。
  2. Jenkins 自动触发对应 Job。
  3. 构建完成后,结果反馈至 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 内容

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 项目配置

1. 启用 Gerrit Trigger

  • 勾选 “Gerrit Trigger”
  • Gerrit 服务器配置:

    • Host: 10.1.19.28
    • Port: 29418
    • Username: jenkins-bot
    • SSH Key: 指向 id_rsa 文件路径

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
Copyright © https://yan-jian.com 2023 all right reserved更新时间: 2025-10-20 15:55:40

results matching ""

    No results matching ""