主题
Jenkins 高可用 + SonarQube 部署与案例文档
环境:RKE2 Kubernetes 集群(API: https://192.168.122.31:6443)+ Harbor 镜像仓库(http://192.168.122.156:30000) 日期:2026-08-13
文档索引
| 序号 | 文档 | 内容 |
|---|---|---|
| 01 | 环境与准备工作 | 集群/仓库信息、客户端工具安装、Harbor 项目创建 |
| 02 | 镜像同步(国内源) | 从国内镜像源同步全部镜像到 Harbor |
| 03 | Jenkins 高可用部署 | Helm 部署 Jenkins Controller + 弹性 Agent |
| 04 | SonarQube 部署 | PostgreSQL + SonarQube 部署与初始化 |
| 05 | JCasC 与工具链配置 | JCasC 详解、java8/java21/node21/golang/python 模板 |
| 06 | 案例验证 | Java 构建案例、SonarQube 扫描案例、工具链验证 |
| 07 | 运维手册 | 日常运维、备份恢复、故障排查 |
| 08 | 公网接入 | frp 隧道 + 公网 Traefik 暴露 Jenkins |
| 09 | 多租户 RBAC 权限管理 | 按文件夹隔离的多租户权限控制、角色设计、Groovy 脚本 |
部署架构
┌─────────────────────────────────────────────────────────────┐
│ RKE2 集群 (192.168.122.23~31) │
│ │
│ namespace: jenkins namespace: sonarqube │
│ ┌──────────────────────┐ ┌───────────────────────┐ │
│ │ jenkins-0 (StatefulSet) │ sonarqube Deployment │ │
│ │ ├ jenkins (lts-jdk21)│ │ image: lts-community │ │
│ │ └ k8s-sidecar(JCasC热加载) │ postgres Deployment │ │
│ │ NodePort 30880 │ │ NodePort 30900 │ │
│ └──────────┬───────────┘ └──────────▲────────────┘ │
│ │ 动态创建 Agent Pod │ sonar:sonar │
│ ┌─────────▼──────────────────────────┐ │ │
│ │ maven8 / maven21 / node21 / │────┘ │
│ │ golang / python (K8s 弹性 Agent) │ │
│ └────────────────────────────────────┘ │
│ │
│ 存储: NFS StorageClass (jenkins-home 20Gi / sonar 10Gi) │
└─────────────────────────────────────────────────────────────┘
▲ ▲
│ 拉取镜像 │ 拉取镜像
┌─────────────┴───────────────────────────┴─────────────────┐
│ Harbor 192.168.122.156:30000 (项目: jenkins/sonarqube) │
│ 镜像来源: docker.m.daocloud.io (国内 Docker Hub 加速源) │
└───────────────────────────────────────────────────────────┘访问入口
| 系统 | 地址 | 账号 |
|---|---|---|
| Jenkins(公网) | https://ai-ear.cn:9010 (frp + 公网 Traefik) | admin / xxx |
| Jenkins(内网) | http://192.168.122.23:30880 (任意节点 IP:30880) | admin / xxx |
| SonarQube | http://192.168.122.23:30900 (任意节点 IP:30900) | admin / xxx |
| Harbor | http://192.168.122.156:30000 | admin / xxx |
目录结构
jenkins/
├── charts/ # Jenkins Helm chart 5.9.54
├── deploy/
│ ├── jenkins/ # values.yaml、maven 阿里云镜像 settings.xml
│ ├── sonarqube/ # SonarQube + PostgreSQL K8s 清单
│ └── examples/ # Java 示例项目源码
├── scripts/ # 镜像同步脚本、节点 registry 修复脚本
├── logs/ # 同步/部署日志
├── docs/ # 本文档目录
└── tools/ # kubectl高可用方案说明
开源版 Jenkins Controller 不支持 active-active 多副本(JENKINS_HOME 单写者)。 本次采用 K8s 标准 HA 模式:StatefulSet 自愈 + NFS RWX 共享存储 + 弹性 Agent + JCasC。 故障演练实测:删除控制器 Pod 后自动重建恢复(约 2 分 20 秒),数据零丢失(详见 03 文档 3.5 节)。 如需多副本同时服务,需多控制器分片或商业版 CloudBees CI。