首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
Ruo-Yi项目CI/CD部署实战:Jenkins+K8S全流程解析
📅 2026/9/10 12:45:29
✍️ 爱科研究院
👁 阅读 3,247
1. Ruo-Yi项目CI/CD部署全景解析作为国内广泛使用的开源后台管理系统Ruo-Yi的自动化部署一直是开发团队关注的焦点。最近在技术社区看到不少同行在讨论如何为Ruo-Yi搭建完整的CI/CD流水线正好结合我去年为某金融项目部署Ruo-Yi的经验分享一套经过生产验证的部署方案。这套方案采用Jenkins作为流水线引擎K8S作为最终部署环境中间包含代码质量检查、多环境部署等企业级功能。传统的手动部署方式对于Ruo-Yi这样的多模块项目包含admin、monitor等子模块效率极低。通过Jenkins Pipeline实现构建、测试、部署全流程自动化后我们的发布频率从每周1次提升到每日3次且部署成功率从70%提升至98%。下面就从环境准备开始逐步拆解每个关键环节的实现细节。2. 基础环境搭建与工具链选型2.1 服务器资源规划建议对于中小型项目我推荐以下最小化配置Jenkins服务器4核8G需挂载数据盘存放构建产物K8S集群3节点1master2worker每个节点4核16G代码仓库GitLab CE内存消耗较大建议单独部署特别注意Jenkins和K8S建议分开部署。实测发现当Jenkins与K8S master同节点时在并发构建场景下会出现资源争抢问题。2.2 关键组件版本选择经过多个项目验证的稳定版本组合Jenkins2.346.3LTS版本Kubernetes1.23.8避免使用最新版社区支持更成熟Docker20.10.17与K8S版本强相关JDK11Ruo-Yi官方推荐版本版本兼容性是个大坑。曾遇到某项目使用K8S 1.25版本时Jenkins的Kubernetes插件出现Pod调度异常。建议通过以下命令验证组件兼容性kubectl version --short docker version --format {{.Server.Version}}2.3 网络与存储准备容器镜像仓库选择中小团队可用Harbor搭建私有仓库阿里云ACR等云服务适合无自建基础设施团队持久化存储方案# NFS配置示例用于Jenkins workspace持久化 yum install -y nfs-utils mkdir /data/jenkins echo /data/jenkins *(rw,sync,no_root_squash) /etc/exports systemctl enable --now nfs-server3. Jenkins核心配置实战3.1 安全加固与性能调优新安装的Jenkins默认配置存在安全隐患且性能不佳建议进行以下优化修改JVM参数/etc/sysconfig/jenkinsJENKINS_JAVA_OPTIONS-Djava.awt.headlesstrue -Xms4g -Xmx4g -XX:MaxRAMPercentage70.0配置反向代理Nginx示例location /jenkins { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }关键插件清单Kubernetes: 1.31.3Pipeline: 2.13Git Parameter: 0.9.16SonarQube Scanner: 2.153.2 动态Agent配置传统静态Agent资源利用率低推荐使用Kubernetes插件实现动态Agent在Jenkins系统配置中添加K8S云podTemplate( label: jnlp-agent, containers: [ containerTemplate( name: jnlp, image: jenkins/inbound-agent:4.11-1-jdk11, args: ${computer.jnlpmac} ${computer.name} ) ], volumes: [ hostPathVolume(mountPath: /var/run/docker.sock, hostPath: /var/run/docker.sock) ] )测试Agent连接性kubectl get pods -n jenkins # 应看到自动创建的jnlp-xxxxx pod4. Ruo-Yi流水线设计详解4.1 多分支流水线架构针对Ruo-Yi的多模块特性建议采用如下结构Jenkinsfile (根目录) ├── deploy/ # K8S部署模板 │ ├── admin.yaml │ └── monitor.yaml ├── scripts/ # 构建脚本 │ ├── sonar.sh │ └── docker-build.sh └── src/ # 源代码4.2 关键阶段实现代码代码质量检查阶段SonarQube集成stage(Code Quality) { steps { script { def scannerHome tool SonarQubeScanner withSonarQubeEnv(SonarQube) { sh ${scannerHome}/bin/sonar-scanner \ -Dsonar.projectKeyruoyi \ -Dsonar.java.binariestarget/classes } timeout(time: 10, unit: MINUTES) { waitForQualityGate abortPipeline: true } } } }多环境部署策略使用Kustomize# 目录结构 base/ ├── deployment.yaml ├── kustomization.yaml └── service.yaml overlays/ ├── dev │ ├── kustomization.yaml │ └── patch.yaml └── prod ├── kustomization.yaml └── patch.yaml5. K8S部署优化方案5.1 资源限制与健康检查Ruo-Yi各组件推荐资源配置resources: limits: cpu: 2 memory: 2Gi requests: cpu: 0.5 memory: 512Mi livenessProbe: httpGet: path: /login port: 8080 initialDelaySeconds: 60 periodSeconds: 105.2 高可用方案Pod反亲和性配置affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: app operator: In values: - ruoyi-admin topologyKey: kubernetes.io/hostnameHPA自动扩缩容kubectl autoscale deployment ruoyi-admin --cpu-percent50 --min2 --max56. 监控与日志方案6.1 Prometheus监控配置针对Ruo-Yi的监控指标采集- job_name: ruoyi metrics_path: /actuator/prometheus static_configs: - targets: [ruoyi-admin:8080] relabel_configs: - source_labels: [__address__] regex: (.*):\d target_label: instance replacement: $16.2 日志收集方案Filebeat配置示例filebeat.inputs: - type: container paths: - /var/log/containers/*ruoyi*.log output.elasticsearch: hosts: [elasticsearch:9200]7. 典型问题排查指南7.1 Jenkins常见故障构建卡在Pending状态# 检查K8S节点资源 kubectl describe nodes | grep -A 10 Allocated resources # 查看事件日志 kubectl get events --sort-by.lastTimestamp流水线语法校验失败建议安装Pipeline Utility Steps插件后使用script { def jenkinsfile readFileFromWorkspace(Jenkinsfile) def syntax pipelineSyntax([jenkinsfile: jenkinsfile]) echo syntax.result }7.2 K8S部署问题ImagePullBackoff错误处理# 临时解决方案测试环境 kubectl patch deployment ruoyi-admin -p {spec:{template:{spec:{imagePullSecrets:[{name:regcred}]}}}} # 永久解决方案 kubectl create secret docker-registry regcred \ --docker-serveryour-registry \ --docker-usernamename \ --docker-passwordpwd服务无法访问检查步骤# 检查Service Endpoints kubectl get endpoints ruoyi-admin # 端口转发测试 kubectl port-forward svc/ruoyi-admin 8080:8080这套方案在某银行项目中稳定运行超过8个月期间经历了3次大版本升级。最大的收获是一定要为Jenkins的workspace配置持久化存储我们曾因未配置导致历史构建记录全部丢失。另外建议每周对Jenkins的JENKINS_HOME目录进行备份可通过简单的cronjob实现0 3 * * 6 tar czf /backup/jenkins_$(date \%Y\%m\%d).tar.gz /var/lib/jenkins
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/9/10 12:45:29
CANN/GE图引擎属性名列表
2026/9/10 12:45:29
agents 仓库 incident-response 插件深度解析:DevOps 故障排查 Agent(devops-troubleshooter)的能力设计与落地
2026/9/10 12:45:29
trace-to-training-data 转换配方指南:将评估轨迹转换为 SFT 样本与 DPO 偏好对
2026/9/10 16:46:09
基于ArkTS的鸿蒙家教APP开发:状态管理与列表渲染工程实践
2026/9/10 16:46:09
Qt+C++实现Modbus RTU协议调试与模块化开发
2026/9/10 16:46:09
CVAT 标注实战:从部署到导出 COCO 数据集的 7 个步骤
2026/9/10 16:46:09
restic 仓库设计全解:存储格式、加密认证、索引去重与安全模型
2026/9/10 16:46:09
win10设置让某个软件开机自启动
2026/9/10 16:41:07
免费离线转换 Visio 文件、批量导出流程图为图片:drawio-desktop 实用指南
2026/9/10 0:04:20
AI搜索的信任缺口:企业内容如何在答案时代自证可信
2026/9/10 0:04:20
Spring Boot+Vue+Node.js售后服务系统开发实战
2026/9/10 0:04:20
SpringBoot+Vue民宿预订管理系统开发实践:从架构设计到部署上线
2026/9/10 2:30:52
超人会飞不算本事:系统稳定依赖清晰规则与边界设计
2026/9/10 5:51:31
超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论
2026/9/10 8:32:02
基于CNN的调制信号识别:MATLAB实现时频图分类实战