Rocky Linux 8.5部署Jenkins CI/CD全流程指南
1. 项目概述在当今DevOps实践中持续集成与持续交付(CI/CD)已成为软件开发的标准配置。作为最流行的开源自动化服务器Jenkins凭借其强大的插件生态和灵活性在企业级CI/CD流水线中占据主导地位。本文将基于Rocky Linux 8.5这一企业级Linux发行版详细讲解Jenkins的部署、配置与优化全过程特别关注跨平台构建和容器化支持。Rocky Linux作为CentOS的替代品以其稳定性和长期支持(LTS)特性受到企业用户青睐。选择8.5版本是因为它提供了完善的软件包支持同时保持较高的稳定性。我们将从基础环境配置开始逐步构建一个支持多语言项目、跨平台构建和容器化部署的完整CI/CD流水线。2. 环境准备与基础配置2.1 系统初始化设置在开始安装Jenkins前我们需要对Rocky Linux 8.5进行一些基础配置# 更新系统并安装基础工具 sudo dnf update -y sudo dnf install -y vim wget curl git net-tools epel-release # 配置防火墙(如果启用) sudo firewall-cmd --permanent --add-port8080/tcp sudo firewall-cmd --reload # 设置时区(以上海为例) sudo timedatectl set-timezone Asia/Shanghai # 禁用SELinux(可选生产环境建议保持开启并配置策略) sudo setenforce 0 sudo sed -i s/^SELINUXenforcing/SELINUXpermissive/ /etc/selinux/config注意生产环境中不建议完全禁用SELinux可以通过audit2allow工具生成自定义策略模块来允许Jenkins的必要操作。2.2 Java环境安装Jenkins需要Java运行时环境推荐使用OpenJDK 11sudo dnf install -y java-11-openjdk java-11-openjdk-devel # 验证安装 java -version javac -version如果系统需要同时维护多个Java版本可以使用alternatives工具进行管理sudo alternatives --config java sudo alternatives --config javac3. Jenkins安装与初始配置3.1 安装JenkinsRocky Linux 8.5的默认仓库不包含Jenkins我们需要添加官方仓库sudo wget -O /etc/yum.repos.d/jenkins.repo \ https://pkg.jenkins.io/redhat-stable/jenkins.repo sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key sudo dnf install -y jenkins安装完成后启动服务并设置开机自启sudo systemctl enable jenkins sudo systemctl start jenkins sudo systemctl status jenkins3.2 初始访问与插件配置首次访问Jenkins需要解锁管理员账户sudo cat /var/lib/jenkins/secrets/initialAdminPassword在浏览器访问http://服务器IP:8080输入密码后进入插件安装界面。建议选择安装推荐的插件这包括最常用的Git、Pipeline和Docker插件。实操心得国内服务器可能会遇到插件下载慢的问题可以通过以下方法解决修改/var/lib/jenkins/hudson.model.UpdateCenter.xml中的更新中心URL为国内镜像使用代理服务器设置手动下载插件并离线安装3.3 基础安全配置完成初始设置后应立即配置安全选项进入Manage Jenkins Configure Global Security启用Enable security选择适合的认证方式推荐Matrix-based security配置适当的权限矩阵设置CSRF保护4. 流水线核心配置与优化4.1 创建第一个Pipeline项目点击新建Item选择Pipeline输入项目名称在Pipeline部分选择Pipeline script或Pipeline script from SCM对于简单的测试可以直接在脚本框中输入pipeline { agent any stages { stage(Build) { steps { echo Building... } } stage(Test) { steps { echo Testing... } } stage(Deploy) { steps { echo Deploying... } } } }4.2 集成版本控制系统大多数项目使用Git作为版本控制系统。配置Git集成安装Git插件如果尚未安装进入Manage Jenkins Global Tool Configuration找到Git部分配置Git可执行文件路径通常为/usr/bin/git在项目配置中选择Git作为SCM填写仓库URL和凭据对于需要SSH密钥访问的私有仓库# 在Jenkins服务器上生成SSH密钥对 sudo -u jenkins ssh-keygen -t rsa -b 4096 # 将公钥添加到Git服务提供商 sudo cat /var/lib/jenkins/.ssh/id_rsa.pub4.3 跨平台构建配置Jenkins支持通过节点(Node)机制实现跨平台构建。配置步骤进入Manage Jenkins Manage Nodes and Clouds点击New Node输入节点名称并选择Permanent Agent配置节点属性Remote root directory代理节点上的工作目录Labels为该节点添加标签如linux,windows等Launch method根据目标平台选择SSH、JNLP等在Pipeline中可以通过标签指定运行节点pipeline { agent { label linux } // 其余配置... }注意事项跨节点构建时需要注意文件路径的兼容性建议使用Jenkins提供的路径工具如pwd()和isUnix()来处理平台差异。5. 容器化构建与部署5.1 Docker环境配置首先在Rocky Linux 8.5上安装Dockersudo dnf config-manager --add-repohttps://download.docker.com/linux/centos/docker-ce.repo sudo dnf install -y docker-ce docker-ce-cli containerd.io sudo systemctl enable --now docker sudo usermod -aG docker jenkins配置Docker镜像加速国内服务器建议配置sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json -EOF { registry-mirrors: [https://你的镜像加速地址] } EOF sudo systemctl restart docker5.2 在Pipeline中使用DockerJenkins Pipeline可以直接使用Docker容器作为构建环境pipeline { agent { docker { image maven:3.8.4-jdk-11 args -v $HOME/.m2:/root/.m2 } } stages { stage(Build) { steps { sh mvn clean package } } } }对于多容器场景可以使用docker-composestage(Integration Test) { steps { sh docker-compose up -d sh ./run-tests.sh sh docker-compose down } }5.3 Kubernetes集成高级对于Kubernetes集群可以安装Kubernetes插件并配置云安装Kubernetes插件进入Manage Jenkins Manage Nodes and Clouds Configure Clouds添加Kubernetes云配置填写Kubernetes集群详情和凭据然后在Pipeline中可以使用Kubernetes代理pipeline { agent { kubernetes { label my-k8s-agent yaml apiVersion: v1 kind: Pod metadata: labels: some-label: some-value spec: containers: - name: maven image: maven:3.8.4-jdk-11 command: [cat] tty: true volumeMounts: - mountPath: /root/.m2 name: maven-cache volumes: - name: maven-cache emptyDir: {} } } stages { // 阶段定义... } }6. 性能优化与最佳实践6.1 Jenkins系统优化JVM参数调整编辑/etc/sysconfig/jenkins中的JENKINS_JAVA_OPTIONSJENKINS_JAVA_OPTIONS-Djava.awt.headlesstrue -Xms2g -Xmx4g -XX:MaxRAMPercentage70.0 -XX:UseG1GC调整工作线程数在Manage Jenkins System Configuration中设置执行器数量建议为CPU核心数的1.5-2倍定期清理工作空间安装Workspace Cleanup插件或在Pipeline中添加post { always { cleanWs() } }6.2 Pipeline优化技巧并行执行利用parallel步骤加速构建stage(Test) { parallel { stage(Unit Test) { steps { sh ./run-unit-tests.sh } } stage(Integration Test) { steps { sh ./run-integration-tests.sh } } } }条件执行使用when指令stage(Deploy to Staging) { when { branch develop } steps { sh ./deploy-to-staging.sh } }参数化构建parameters { choice(name: DEPLOY_ENV, choices: [dev, staging, prod], description: Select deployment environment) string(name: VERSION, defaultValue: 1.0.0, description: Application version) } stage(Deploy) { steps { script { if (params.DEPLOY_ENV prod) { sh ./deploy-prod.sh ${params.VERSION} } else { sh ./deploy-${params.DEPLOY_ENV}.sh ${params.VERSION} } } } }6.3 监控与日志安装Monitoring插件如Prometheus Metrics、Jenkins Monitoring等配置日志轮转在/etc/logrotate.d/jenkins中添加配置集中式日志将日志发送到ELK或Graylog等系统7. 常见问题排查7.1 插件安装失败现象插件下载超时或安装失败解决方案检查网络连接尝试更换更新中心镜像手动下载.hpi文件并上传安装检查/var/log/jenkins/jenkins.log获取详细错误信息7.2 权限问题现象Pipeline执行时出现权限拒绝错误解决方案确保jenkins用户对相关目录有适当权限检查SELinux上下文ls -Z /path/to/directory使用setfacl设置ACL权限sudo setfacl -Rm u:jenkins:rwx /path/to/directory7.3 Docker连接问题现象Pipeline中无法使用Docker命令解决方案确保jenkins用户在docker组中重启Jenkins服务使组变更生效测试Docker命令是否可用sudo -u jenkins docker ps7.4 内存不足现象构建失败日志显示内存不足解决方案增加Jenkins JVM堆内存对于内存密集型任务使用docker或kubernetes代理隔离环境调整构建工具内存参数如Maven的MAVEN_OPTS8. 安全加固建议定期备份备份/var/lib/jenkins目录最小权限原则为每个项目创建专用凭据和权限插件审计定期检查并移除不必要或过时的插件更新策略保持Jenkins和插件的最新稳定版本网络隔离将Jenkins部署在内网仅暴露必要的端口我在实际部署中发现合理配置的Rocky Linux Jenkins组合能够提供企业级的稳定性和性能。特别是在容器化构建场景下通过合理配置Docker缓存和卷映射可以显著提升构建效率。一个实用的技巧是为Maven/Gradle等工具配置持久化缓存卷避免每次构建都重新下载依赖。

相关新闻

VSCode + Cortex-Debug + OpenOCD:打造开源高效的STM32调试环境

VSCode + Cortex-Debug + OpenOCD:打造开源高效的STM32调试环境

1. 项目概述:为什么需要一套趁手的调试配置?如果你用STM32做过开发,大概率经历过这样的场景:代码在IDE里编译通过了,下载到板子上却死活没反应,或者运行到某个地方就卡死了。这时候,你需要的不是…

2026/10/13 16:08:14 阅读更多 →
【科研速递·内含译文】CRST | 青藏高原不稳定富冰多年冻土区桥梁运营期周边冻土热特性监测

【科研速递·内含译文】CRST | 青藏高原不稳定富冰多年冻土区桥梁运营期周边冻土热特性监测

Monitoring the thermal characteristics of surrounding permafrost during bridge operation in unstable and high ice content permafrost site of the Qinghai-Tibet Plateau 中国科学院西北生态环境资源研究院等团队在期刊 Cold Regions Science and Technology 在线发表…

2026/10/14 15:53:04 阅读更多 →
文案秒变爆款视频:3步工作流+5大避坑指南,AI视频生成效率提升300%的底层逻辑

文案秒变爆款视频:3步工作流+5大避坑指南,AI视频生成效率提升300%的底层逻辑

更多请点击: https://kaifayun.com 第一章:AI视频生成的范式革命:从文案到成片的底层逻辑跃迁 传统视频制作依赖分镜脚本、实拍剪辑与后期合成,耗时数周甚至数月;而新一代AI视频生成系统正将这一流程压缩至分钟级——…

2026/10/14 7:16:15 阅读更多 →

最新新闻

PGD对抗训练:深度学习鲁棒性工程落地核心方法

PGD对抗训练:深度学习鲁棒性工程落地核心方法

1. 项目概述:为什么PGD对抗训练成了深度学习鲁棒性的“试金石”“Towards Deep Learning Models Resistant to Adversarial Attacks (PGD)”——这个标题乍看像一篇论文的副标题,但背后藏着当前工业界模型落地最真实、最棘手的痛点…

2026/10/15 8:27:40 阅读更多 →
图即代码:diagram-design 从零构建可版本控制的架构图

图即代码:diagram-design 从零构建可版本控制的架构图

1. 从“diagram-design”这个标题说起:它到底在解决什么问题第一次看到“diagram-design”这个标题,我脑子里蹦出来的不是某个具体工具,而是一类非常典型的工程需求:把脑子里那张模糊的架构图、流程图、时序图,快速变成…

2026/10/15 8:27:39 阅读更多 →
WebRTC与SIP协议转换网关:声网SDK与FreeSWITCH集成实战

WebRTC与SIP协议转换网关:声网SDK与FreeSWITCH集成实战

1. 项目缘起与整体架构拆解WebRTC 和 SIP 这两个协议栈,一个扎根在浏览器生态,一个统治着传统电话网络,各自都活得挺好,但偏偏在很多企业通信场景里,业务方就是想让浏览器里的用户直接拨通电话网络里的号码&#xff0c…

2026/10/15 8:27:39 阅读更多 →
CuteLogger 集成指南:用 Qt 构建可靠日志系统的核心思路与避坑

CuteLogger 集成指南:用 Qt 构建可靠日志系统的核心思路与避坑

简介:CuteLogger 是一套面向 Qt 开发者的轻量级日志库,用于替代 qDebug 等原生输出,解决多线程工程中日志信息不全、格式不统一、扩展性不足等问题。它几乎能记录文件名、源代码行与函数签名,并通过附加程序机制灵活输出到文件、控…

2026/10/15 8:27:39 阅读更多 →
Nginx高可用集群实战:Keepalived+虚拟IP实现主备自动切换

Nginx高可用集群实战:Keepalived+虚拟IP实现主备自动切换

1. 为什么要搭建Nginx高可用集群1.1 单点故障的现实困境很多人刚开始接触Nginx时,都是在单台服务器上部署,做反向代理、静态资源托管、负载均衡转发。这套玩法在开发环境和中小流量场景下没什么问题,但当它真正扛起生产流量时,一个…

2026/10/15 8:27:39 阅读更多 →
artcraft 项目实战:从创意到成品的流程编排与参数体系设计

artcraft 项目实战:从创意到成品的流程编排与参数体系设计

1. 从“artcraft”这个名字说起:它到底想解决什么问题第一次看到“artcraft”这个项目标题,我的直觉是:这大概率是一个把“艺术创作”和“手工实现”捏合在一起的工具型项目。拆开来看,“art”指向视觉表达、创意生成、审美输出&a…

2026/10/15 8:26:36 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →