Skip to content

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
03Jenkins 高可用部署Helm 部署 Jenkins Controller + 弹性 Agent
04SonarQube 部署PostgreSQL + SonarQube 部署与初始化
05JCasC 与工具链配置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
SonarQubehttp://192.168.122.23:30900 (任意节点 IP:30900)admin / xxx
Harborhttp://192.168.122.156:30000admin / 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。