生产级Linux与Jenkins治理实战:RockyLinux9全栈部署与运维闭环
开篇为什么选择RockyLinux9作为生产基座在RHEL生态中CentOS 7已于2024年6月停服CentOS 8更是提前谢幕。RockyLinux9作为RHEL 9的1:1二进制兼容发行版已经成为企业级生产环境的首选替代方案。相比CentOS 7RockyLinux9带来了内核5.14对cgroups v2、eBPF、IO_uring等新特性的完整支持AppStream模块化软件包按流stream管理可同时安装多个版本的PHP/Node.js等增强的SELinux策略默认策略更严格但也更精细systemd 252新增systemd-creds、systemd-vconsole等实用工具完整的OpenJDK生态从JDK11到JDK21甚至JDK25均可通过官方源或手动部署我的选择逻辑如果你现在还要新建生产环境RockyLinux9是性价比最高的“正规军”——既有RHEL的企业级稳定性又没有订阅费用社区活跃度也远高于AlmaLinux。第一部分RockyLinux9上部署Jenkins —— WAR包 Systemd SELinux全打通1.1 为什么放弃Docker和RPM选择WAR包部署生产环境部署Jenkins有三种主流方式我用一张表说清优劣部署方式优点缺点适用场景RPM安装与系统包管理集成升级方便配置文件散落各处/etc、/var/lib、/var/log迁移困难测试环境不关心目录规范Docker容器隔离性好环境一致性高需额外管理卷权限、网络模式、容器升级构建时需挂载docker.sock有安全风险已有K8s集群或容器化成熟的团队WAR包 Systemd所有文件集中可控升级替换一个文件回滚重启服务需手动配置systemd单元生产环境强烈推荐WAR包部署的核心优势是透明性和可控性——你清楚知道每个文件在哪里每个进程由谁启动日志往哪里输出。这在生产排障时是致命的优势。1.2 RockyLinux9上的JDK25安装避坑版RockyLinux9自带的OpenJDK是11和17但Jenkins最新版本对高版本JDK的兼容性越来越好。我选择JDK25的原因性能提升ZGCZ Garbage Collector在JDK25中进一步优化大堆内存场景下GC暂停时间从毫秒级降到微秒级向前兼容Jenkins核心代码基于Java 8/11编写向上兼容性经过多年验证减少后续升级一次到位至少管用2-3年安装步骤生产级操作# 1. 下载官方OpenJDK25 tar包不要用rpm避免依赖冲突 wget https://download.java.net/java/GA/jdk25/.../openjdk-25_linux-x64_bin.tar.gz sudo mkdir -p /usr/lib/jvm sudo tar -xzf openjdk-25_linux-x64_bin.tar.gz -C /usr/lib/jvm/ sudo mv /usr/lib/jvm/jdk-25 /usr/lib/jvm/jdk-25 2. 使用alternatives管理多个JDK版本RockyLinux9特有 sudo alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-25/bin/java 1 sudo alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk-25/bin/javac 1 sudo alternatives --config java # 手动选择JDK25 3. 设置全局环境变量所有用户继承 echo export JAVA_HOME/usr/lib/jvm/jdk-25 | sudo tee /etc/profile.d/java.sh echo export PATH$JAVA_HOME/bin:$PATH | sudo tee -a /etc/profile.d/java.sh source /etc/profile.d/java.sh避坑重点不要用dnf install java-25-openjdk因为RockyLinux9官方源最高只到JDK21第三方源可能引入不稳定依赖alternatives是RHEL系管理多版本软件的标准工具比手动修改/etc/alternatives更安全1.3 目录规划 —— 从一开始就像个正规军Jenkins的所有文件集中存放在/opt/jenkins下结构如下/opt/jenkins/ ├── jenkins.war # 核心war包只读升级时替换 ├── home/ # JENKINS_HOME所有配置、插件、构建产物 │ ├── config.xml # 全局配置 │ ├── jobs/ # 所有Job定义 │ ├── plugins/ # 插件文件 │ ├── workspace/ # 构建工作空间可能很大 │ └── logs/ # Jenkins内部日志非stdout ├── bin/ │ └── jenkins.sh # 启动脚本封装可选 └── backups/ # 手动备份目录创建专用用户和目录sudo useradd -r -s /bin/bash -d /opt/jenkins/home -m jenkins sudo mkdir -p /opt/jenkins/{home,bin,backups} sudo chown -R jenkins:jenkins /opt/jenkins sudo chmod -R 755 /opt/jenkins1.4 Systemd服务单元 —— 生产级的自我修养在RockyLinux9中systemd版本为252支持更多新特性。我的/etc/systemd/system/jenkins.service配置[Unit] DescriptionJenkins Continuous Integration Server Afternetwork-online.target Wantsnetwork-online.target [Service] Userjenkins Groupjenkins WorkingDirectory/opt/jenkins EnvironmentJAVA_HOME/usr/lib/jvm/jdk-25 EnvironmentJENKINS_HOME/opt/jenkins/home EnvironmentJAVA_OPTS-Xms2g -Xmx4g -XX:UseZGC -XX:ZGenerational -Dhudson.model.DownloadService.noSignatureChecktrue -Djava.awt.headlesstrue ExecStart/usr/lib/jvm/jdk-25/bin/java $JAVA_OPTS -jar /opt/jenkins/jenkins.war --httpPort8080 ExecReload/bin/kill -HUP $MAINPID Restarton-failure RestartSec15 StartLimitInterval60 StartLimitBurst3 StandardOutputjournal StandardErrorjournal SyslogIdentifierjenkins [Install] WantedBymulti-user.target重点参数解读Afternetwork-online.target确保网络完全就绪后再启动避免端口绑定失败Restarton-failureRestartSec15崩溃后15秒自动拉起配合StartLimitBurst3防止无限重启-XX:UseZGC -XX:ZGenerationalJDK25的ZGC分代模式大堆内存下GC暂停1msStandardOutputjournal所有日志输出到systemd journal便于统一管理服务管理命令sudo systemctl daemon-reload sudo systemctl enable jenkins --now sudo systemctl status jenkins journalctl -u jenkins -f -n 100 # 实时查看日志1.5 RockyLinux9的防火墙与SELinux —— 别再一关了之RockyLinux9默认启用firewalld和SELinuxenforcing模式很多教程教你systemctl stop firewalld和setenforce 0这在生产环境是绝对禁止的。防火墙配置精细化管理# 只开放必要端口 sudo firewall-cmd --permanent --add-servicessh sudo firewall-cmd --permanent --add-port8080/tcp # 如果有构建节点JNLP开放50000 sudo firewall-cmd --permanent --add-port50000/tcp # 限制访问来源强烈建议 sudo firewall-cmd --permanent --add-rich-rulerule familyipv4 source address192.168.1.0/24 port protocoltcp port8080 accept sudo firewall-cmd --reload sudo firewall-cmd --list-allSELinux配置不关闭只定制# 1. 检查当前SELinux状态 sestatus 2. 为Jenkins主目录设置正确的SELinux上下文 sudo semanage fcontext -a -t jenkins_home_t /opt/jenkins/home(/.*)? sudo restorecon -Rv /opt/jenkins/home 3. 为Jenkins WAR包设置正确的上下文 sudo semanage fcontext -a -t bin_t /opt/jenkins/jenkins.war sudo restorecon -v /opt/jenkins/jenkins.war 4. 允许Jenkins绑定8080端口如果使用非标准端口需相应调整 sudo semanage port -a -t http_port_t -p tcp 8080 5. 允许Jenkins访问网络用于插件下载、构建节点通信等 sudo setsebool -P httpd_can_network_connect 1 6. 查看SELinux审计日志排查潜在问题 sudo ausearch -m avc -ts recent | grep jenkins核心原则生产环境的安全策略应该是“最小权限、精细控制”而不是粗暴关闭。通过上述配置Jenkins可以在SELinux enforcing模式下正常运行同时系统整体安全性得到保障。

相关新闻

最新新闻

日新闻

周新闻

月新闻