资讯动态

Linux服务器上Jenkins自动化部署实战:从零搭建到安全加固

发布时间:2026/8/7 10:19:24 来源:尧图企业网站定制
1. 项目概述为什么要在Linux上部署Jenkins如果你是一名开发者、运维工程师或者项目管理者最近被“自动化部署”、“持续集成”这些词搞得心痒痒那Jenkins这个名字你一定不陌生。简单来说Jenkins是一个开源的、用Java写的自动化服务器它能帮你把那些重复、繁琐的构建、测试、部署工作全部自动化。想象一下每次代码提交后自动触发编译、跑单元测试、打包成Docker镜像、再推送到服务器上线整个过程无需人工干预这能省下多少时间和避免多少人为错误。那么为什么要把Jenkins装在Linux上这几乎是行业内的标准答案。Linux服务器以其极高的稳定性、出色的性能和几乎为零的授权成本成为了生产环境后端服务的绝对主力。在Linux上运行Jenkins意味着你的自动化流水线拥有了一个坚实、可靠、可7x24小时不间断运行的家。无论是个人学习、团队协作还是企业级CI/CD持续集成/持续交付流程从Linux起步都是最正统、最稳妥的选择。今天我就以一个过来人的身份带你从零开始在Linux系统上完整地走一遍Jenkins的安装、配置到初步使用的全过程。我会把每一步的原理、可能遇到的坑以及我踩过后总结的经验毫无保留地分享给你。2. 环境准备与前置条件检查在动手安装任何软件之前充分的准备工作能避免至少80%的后续问题。安装Jenkins也不例外它不是一个独立的软件而是一个运行在Java环境中的Web应用。因此我们的准备工作需要围绕其依赖展开。2.1 系统与权限确认首先你需要一台Linux服务器。它可以是云服务器如阿里云ECS、腾讯云CVM、本地虚拟机VMware或VirtualBox安装的CentOS、Ubuntu等甚至是一台树莓派。对于学习和小型项目1核2G的配置就足够让Jenkins流畅运行了。通过SSH连接到你的服务器后第一件事是确认你的用户权限。Jenkins的安装和后续的软件包管理通常需要root权限或者你的当前用户拥有sudo权限。# 检查当前用户 whoami # 尝试切换到root用户或使用sudo执行一个简单命令 sudo ls /root如果第二条命令提示输入密码或成功执行说明你拥有足够的权限。如果提示“用户不在sudoers文件中”你需要联系系统管理员为你添加权限或者直接使用root用户操作生产环境不推荐长期使用root。接下来了解一下你的Linux发行版和版本这决定了我们后续使用哪种包管理工具。# 对于CentOS/RHEL/Fedora系列 cat /etc/redhat-release # 对于Ubuntu/Debian系列 lsb_release -a记下你的系统版本比如“Ubuntu 22.04 LTS”或“CentOS 7.9”。2.2 Java环境安装与验证Jenkins本身是一个Java Web应用程序它需要Java运行时环境JRE来执行。但为了更好的兼容性和支持Jenkins插件生态我们通常直接安装完整的Java开发工具包JDK。Jenkins 2.357及之后的LTS版本长期支持版要求至少Java 11而最新的版本可能要求Java 17或更高。这里以安装OpenJDK 11为例它是开源且广泛使用的选择。对于Ubuntu/Debian系统# 1. 更新软件包列表 sudo apt update # 2. 安装OpenJDK 11包括JRE和JDK sudo apt install openjdk-11-jdk -y # 3. 验证安装 java -version执行java -version后你应该能看到类似“openjdk version “11.0.xx”的输出确认主版本号是11。对于CentOS/RHEL 7/8系统在较新的CentOS 8或RHEL 8上可以直接用dnf安装。sudo dnf install java-11-openjdk-devel -y java -version对于CentOS 7可能需要先启用EPELExtra Packages for Enterprise Linux仓库。# 安装EPEL仓库 sudo yum install epel-release -y # 安装OpenJDK 11 sudo yum install java-11-openjdk-devel -y java -version注意有些教程会建议安装Oracle JDK但对于Jenkins来说OpenJDK是完全兼容且免费的无需处理复杂的Oracle许可证问题是生产环境的推荐选择。安装完成后还可以通过which java和java -version来确认java命令的路径和版本。一个常见的技巧是设置JAVA_HOME环境变量虽然Jenkins启动脚本通常会自己找到Java但显式设置可以避免一些潜在的插件兼容性问题。# 查找Java安装路径通常输出类似 /usr/lib/jvm/java-11-openjdk-amd64 readlink -f $(which java) | sed “s:/bin/java::” # 将上一条命令输出的路径添加到当前用户的 ~/.bashrc 或系统级的 /etc/profile 中 echo “export JAVA_HOME/usr/lib/jvm/java-11-openjdk-amd64” ~/.bashrc source ~/.bashrc echo $JAVA_HOME # 验证变量是否生效3. Jenkins的安装与初始启动环境就绪现在进入正题——安装Jenkins。官方提供了几种安装方式包括通过系统包管理器apt/yum/dnf、直接下载war包运行、或者使用Docker容器。对于新手和大多数生产环境通过官方仓库使用包管理器安装是最简单、最易于维护的方式因为它能自动处理服务注册、依赖关系和后续更新。3.1 通过官方仓库安装JenkinsJenkins官方为不同的Linux发行版维护了软件仓库我们需要先将这个仓库添加到系统的软件源列表中。对于Ubuntu/Debian系统# 1. 安装必要的工具用于添加HTTPS仓库 sudo apt install wget gnupg software-properties-common apt-transport-https -y # 2. 导入Jenkins仓库的GPG密钥用于验证软件包签名 curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo tee /usr/share/keyrings/jenkins-keyring.asc /dev/null # 3. 将Jenkins稳定版仓库添加到系统源列表 echo deb [signed-by/usr/share/keyrings/jenkins-keyring.asc] https://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list /dev/null # 4. 更新软件包列表使新添加的仓库生效 sudo apt update # 5. 安装Jenkins默认会安装最新的长期支持版 - LTS sudo apt install jenkins -y对于CentOS/RHEL/Fedora系统# 1. 导入Jenkins仓库的GPG密钥 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-2023.key # 2. 安装JenkinsCentOS 7用yum8/9用dnf # CentOS 7 sudo yum install jenkins -y # CentOS 8/9, RHEL 8/9, Fedora sudo dnf install jenkins -y实操心得务必使用上述官方提供的稳定版仓库地址。网络上有些老旧教程的仓库地址可能已失效会导致安装失败。安装命令执行后包管理器会自动处理所有依赖包括Jenkins本身和一个内嵌的Jetty Web服务器。3.2 管理Jenkins服务并获取初始密码安装完成后Jenkins会作为一个系统服务systemd service被注册。我们需要启动它并设置开机自启。# 启动Jenkins服务 sudo systemctl start jenkins # 设置Jenkins服务开机自动启动 sudo systemctl enable jenkins # 查看Jenkins服务的运行状态 sudo systemctl status jenkins运行status命令后如果看到“active (running)”的字样并且下面没有红色的错误日志说明Jenkins已经成功启动。Jenkins第一次启动时出于安全考虑会生成一个随机的初始管理员密码并保存在服务器的一个特定文件中。我们需要找到这个密码来完成Web界面的初始化安装。# 查看初始管理员密码 sudo cat /var/lib/jenkins/secrets/initialAdminPassword终端会打印出一串由字母和数字组成的密码比如a1b2c3d4e5f67890abcdef1234567890。请务必复制并保存好这串密码下一步会用到。3.3 防火墙与端口访问配置Jenkins默认使用8080端口提供Web服务。如果你的服务器开启了防火墙如Ubuntu的ufw或CentOS的firewalld你需要放行这个端口否则从外部将无法访问。如果使用ufw(常见于Ubuntu)sudo ufw allow 8080 sudo ufw status verbose # 查看规则是否生效如果使用firewalld(常见于CentOS/RHEL 7)sudo firewall-cmd --permanent --add-port8080/tcp sudo firewall-cmd --reload sudo firewall-cmd --list-all # 查看所有放行的规则如果服务器在云平台如阿里云、腾讯云你还需要登录云平台的控制台找到你的这台云服务器实例的安全组规则添加入站规则允许TCP协议的8080端口。源IP可以设置为0.0.0.0/0允许所有IP访问仅用于测试或你办公室/家庭的公网IP段更安全。完成以上步骤后你就可以打开浏览器访问http://你的服务器IP地址:8080。如果一切顺利你将看到Jenkins经典的“解锁Jenkins”页面。4. 初始化配置与插件安装当你成功访问Jenkins的Web界面看到要求输入初始管理员密码的页面时说明安装已经成功了90%。剩下的10%是至关重要的配置它决定了你的Jenkins是否好用、是否安全。4.1 解锁与自定义安装粘贴初始密码将之前用cat命令获取的那一串密码粘贴到输入框中点击“继续”。插件安装选择接下来Jenkins会提示你安装插件。这里我强烈建议选择“安装推荐的插件”。为什么这个选项会为你安装一个最基础、最通用的插件集合包括Git插件、Pipeline插件、邮件通知插件等。这些是构建自动化流程的基石。虽然你也可以选择“选择插件来安装”但作为新手你很难判断哪些是必需的容易遗漏关键组件导致后续配置时遇到各种“找不到xxx”的错误。等待插件安装这个过程会持续几分钟取决于你的服务器网络速度。页面会显示每个插件的下载和安装进度。如果有个别插件安装失败网络超时是常见原因不必惊慌可以等全部结束后点击“重试”或者直接“继续”后续可以在插件管理中单独安装。创建第一个管理员用户插件安装完成后会进入创建管理员用户的页面。千万不要跳过这一步直接使用初始的admin账户初始密码复杂难记且存在安全风险。在这里你需要设置一个用户名、密码、全名和邮箱。请务必使用一个强密码并牢记。配置实例URL最后一步是配置Jenkins的URL。通常保持默认的http://你的服务器IP:8080即可除非你后续配置了域名或反向代理如Nginx。点击“保存并完成”然后“开始使用Jenkins”。至此一个全新的Jenkins实例就配置完成了。4.2 关键系统配置调优进入Jenkins主界面后先别急着创建任务。有几个重要的系统配置需要检查一下这能让Jenkins用起来更顺手。全局工具配置配置JDK、Git、Maven等点击左侧菜单栏的“系统管理” - “全局工具配置”。JDK虽然Jenkins自己能找到系统安装的Java但在这里显式配置一个“JDK安装”命名为“JDK11”JAVA_HOME路径填写之前我们找到的路径如/usr/lib/jvm/java-11-openjdk-amd64可以让插件和任务更明确地使用指定版本的JDK。Git如果你的服务器上已经安装了Gitsudo apt install git或sudo yum install gitJenkins通常能自动检测到。你也可以在这里指定路径which git可查看。Maven/Gradle如果你的项目需要这些构建工具可以在这里添加。Jenkins支持自动从官网下载安装非常方便。例如添加一个Maven安装选择版本“3.9.6”勾选“自动安装”。配置完成后点击页面底部的“保存”。插件管理安装更多实用插件点击“系统管理” - “插件管理”。切换到“可选插件”标签页。这里我推荐几个初期非常实用的插件你可以在右上角搜索并安装Blue Ocean提供现代化、可视化的流水线编辑和查看界面对新手极其友好。Pipeline Utility Steps为流水线脚本提供大量有用的工具函数如读写文件、操作JSON/YAML等。Docker Pipeline如果你使用Docker进行构建和部署这个插件必不可少。Role-based Authorization Strategy如果需要为团队配置更精细的权限这个插件是基础。勾选需要的插件点击页面底部的“立即安装”重启后生效。系统设置配置邮件通知点击“系统管理” - “系统配置”。找到“邮件通知”部分这是CI/CD中及时获取构建状态成功/失败的关键。你需要一个SMTP服务器的信息比如公司的邮件服务器或者QQ邮箱、163邮箱的SMTP服务。填写SMTP服务器地址如smtp.qq.com、端口如465使用SSL、发件人邮箱、用户名通常是完整邮箱、密码可能是邮箱的授权码而非登录密码。点击右下角的“Test configuration”发送测试邮件如果收到则说明配置成功。最后别忘了“保存”。5. 创建你的第一个自动化任务理论配置完成现在让我们动手创建一个最简单的任务感受一下自动化的魅力。我们将创建一个自由风格的项目它只做一件事打印一句“Hello, Jenkins!”。点击Jenkins主界面左侧的“新建任务”。输入一个任务名称例如“My-First-Job”。选择“构建一个自由风格的软件项目”点击“确定”。在任务配置页面向下滚动到“构建”部分。点击“增加构建步骤”选择“执行shell”对于Linux或“Execute Windows batch command”对于Windows。在命令输入框中写入echo “Hello, Jenkins! This is my first automated job.” echo “Current time is: $(date)”点击页面底部的“保存”。现在回到任务列表你会看到“My-First-Job”。点击它进入任务详情页然后在左侧点击“立即构建”。你会看到左下角的“构建历史”里出现了一个新的构建号如#1。点击这个构建号再点击“控制台输出”你就能看到Jenkins执行你写的shell命令的全过程以及那两句输出。恭喜你已经成功创建并运行了第一个Jenkins任务。虽然它很简单但这就是所有复杂自动化流程的起点。从这里开始你可以逐步增加步骤从Git拉取代码、运行npm install或mvn clean package、执行单元测试、构建Docker镜像、推送到仓库、部署到服务器……每一个步骤都可以通过添加“构建步骤”来实现。6. 常见问题与排查技巧实录在实际安装和配置过程中你几乎一定会遇到一些问题。下面是我总结的一些高频问题及其解决方法希望能帮你快速排雷。6.1 服务启动失败与端口冲突问题现象执行sudo systemctl status jenkins后状态显示为failed或inactive或者虽然显示active但无法通过浏览器访问8080端口。排查思路与解决步骤查看详细日志这是定位问题的第一步也是最有效的一步。sudo journalctl -u jenkins -f --no-pager或者查看Jenkins的专属日志文件sudo tail -f /var/log/jenkins/jenkins.log常见的错误信息包括“Address already in use”8080端口被其他程序占用。使用sudo netstat -tlnp | grep :8080查看是哪个进程占用了端口然后停止该进程或者修改Jenkins的监听端口。修改端口需要编辑/etc/default/jenkins(Debian/Ubuntu) 或/etc/sysconfig/jenkins(RHEL/CentOS) 文件找到HTTP_PORT8080这一行修改为其他端口如8081然后重启Jenkins服务。Java版本不兼容日志中可能提示需要Java 11但找到了Java 8。请严格按照第2步安装正确版本的JDK并使用update-alternatives --config java来切换系统默认的Java版本如果有多个版本的话。权限问题Jenkins默认使用名为jenkins的系统用户运行。确保/var/lib/jenkins,/var/log/jenkins,/var/cache/jenkins等目录的所有权和权限正确。通常安装包会自动设置好但如果你手动移动过文件可能需要sudo chown -R jenkins:jenkins /var/lib/jenkins。检查防火墙和云安全组再次确认本地防火墙和云平台安全组规则是否已正确放行Jenkins服务端口默认8080。可以尝试在服务器本地用curl http://localhost:8080测试如果本地能通但外网不通基本就是网络策略问题。6.2 插件安装缓慢或失败问题现象在初始化安装插件或后续在插件市场安装时下载速度极慢甚至超时失败。原因与解决方案Jenkins默认从国外的官方更新中心下载插件国内访问速度可能很不理想。更换为国内镜像源推荐这是最根本的解决方法。修改Jenkins的升级站点地址。登录Jenkins后台进入“系统管理” - “插件管理” - “高级”选项卡。找到“升级站点”设置将“URL”替换为国内的镜像地址例如清华大学镜像https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json点击“提交”然后重启Jenkins服务 (sudo systemctl restart jenkins)。重启后再次尝试安装插件速度会有质的提升。手动安装插件针对特定失败插件如果某个插件始终安装失败可以手动下载.hpi文件进行安装。访问官方插件市场网站或国内镜像站搜索插件名称下载对应版本的.hpi文件。在Jenkins的“插件管理” - “高级”选项卡中找到“上传插件”部分选择下载的.hpi文件点击“上传”。上传完成后按照提示重启Jenkins即可。6.3 忘记管理员密码问题现象无法登录Jenkins管理员账户。解决方案如果你创建了其他管理员账户可以用其他账户登录修改。如果所有管理员账户都不可用则需要通过修改配置文件来重置。警告此操作会禁用所有安全设置请在操作后立即重新配置。停止Jenkins服务sudo systemctl stop jenkins。编辑Jenkins的用户配置文件。这个文件路径通常是/var/lib/jenkins/users/username_id/config.xml。其中username_id是用户目录如果你只创建过一个admin用户可能叫admin_123456789。在这个XML文件中找到passwordHash节点。将其内容替换为以下内容这是一个已知的“123456”的哈希值仅用于紧急恢复#jbcrypt:$2a$10$DdaLzZQqL5x4Ckp6Qp8n5uY0FQqQx8Z8X8b8c8d8e8f8g8h8i8j8k8l保存文件然后启动Jenkins服务sudo systemctl start jenkins。使用用户名admin和密码123456登录。登录后务必立即前往“系统管理” - “安全设置”重新修改一个强密码6.4 磁盘空间不足告警问题现象Jenkins控制台或系统日志出现“磁盘空间不足”的警告。原因Jenkins在每次构建时默认会保留构建日志、工作空间文件等。长期运行后/var/lib/jenkins目录会变得非常大。清理与预防策略配置构建保留策略在每一个Jenkins任务的配置页面找到“丢弃旧的构建”选项。你可以设置“保持构建的天数”和“保持构建的最大个数”例如只保留最近10次构建或7天内的构建。这是最有效的自动化清理方式。手动清理工作空间对于不再需要的旧项目可以直接进入项目配置点击“立即清理工作空间”按钮。使用插件定期清理安装“Workspace Cleanup Plugin”或“Disk Usage Plugin”。前者可以在构建前后自动清理工作空间后者可以监控磁盘使用情况并给出报告。移动Jenkins主目录如果/var分区本身空间很小可以考虑将Jenkins的整个主目录迁移到更大的磁盘分区上。这需要停止服务移动目录并修改/etc/default/jenkins中的JENKINS_HOME变量指向新位置然后重启服务。操作前务必做好完整备份7. 进阶配置与安全加固建议当你的Jenkins开始承担重要项目的CI/CD任务时安全和稳定性就变得至关重要。以下是一些进阶的配置建议。7.1 使用Nginx反向代理与配置HTTPS直接暴露8080端口和使用HTTP协议是不安全的。我们应该使用Nginx这样的Web服务器作为反向代理并配置HTTPS。安装Nginx和SSL证书# Ubuntu/Debian sudo apt install nginx -y # CentOS/RHEL sudo yum install nginx -y申请SSL证书可以从云服务商获取免费证书或使用Let‘s Encrypt。配置Nginx反向代理 编辑Nginx的站点配置文件例如/etc/nginx/conf.d/jenkins.conf添加如下内容server { listen 80; server_name your-domain.com; # 替换为你的域名或IP return 301 https://$server_name$request_uri; # 强制跳转HTTPS } server { listen 443 ssl http2; server_name your-domain.com; ssl_certificate /path/to/your/cert.pem; ssl_certificate_key /path/to/your/key.pem; # 其他SSL优化配置... location / { proxy_pass http://127.0.0.1:8080; # 转发给本机的Jenkins proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_max_temp_file_size 0; # 以下两行对WebSocket支持很重要Blue Ocean等插件需要 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection “upgrade”; } }检查配置并重启Nginxsudo nginx -t sudo systemctl reload nginx配置Jenkins知晓反向代理 登录Jenkins进入“系统管理” - “系统配置”。找到“Jenkins URL”将其修改为你的HTTPS地址例如https://your-domain.com。这样Jenkins生成的链接就都是正确的了。7.2 配置细粒度的用户权限默认的“任何用户可以做任何事”的权限策略非常危险。建议安装“Role-based Authorization Strategy”插件并配置矩阵或项目角色权限。安装插件后进入“系统管理” - “安全设置”。在“授权策略”中选择“基于角色的授权策略”点击“保存”。页面会刷新出现“管理角色”和“分配角色”的新选项。管理角色在这里定义角色如admin,developer,viewer及其权限全局权限和项目模式权限。分配角色在这里将创建好的角色分配给具体的用户或用户组。 例如你可以创建一个developer角色只给予其“任务”相关的“构建”、“取消构建”、“查看工作空间”等权限而禁止其进行“系统管理”操作。这样可以实现很好的权限隔离。7.3 备份与恢复策略Jenkins的所有配置、任务、插件信息都存储在JENKINS_HOME目录默认是/var/lib/jenkins。定期备份这个目录是运维的黄金法则。简单备份脚本示例创建一个脚本/usr/local/bin/backup-jenkins.sh#!/bin/bash BACKUP_DIR“/backup/jenkins” JENKINS_HOME“/var/lib/jenkins” DATE$(date %Y%m%d_%H%M%S) # 创建备份目录 mkdir -p $BACKUP_DIR # 使用tar打包排除一些临时缓存目录以减小体积 tar -czf “$BACKUP_DIR/jenkins_backup_$DATE.tar.gz” \ --exclude“$JENKINS_HOME/war” \ --exclude“$JENKINS_HOME/.cache” \ --exclude“$JENKINS_HOME/.ssh” \ -C $(dirname $JENKINS_HOME) $(basename $JENKINS_HOME) # 删除超过30天的旧备份 find $BACKUP_DIR -name “jenkins_backup_*.tar.gz” -mtime 30 -delete echo “Backup completed: $BACKUP_DIR/jenkins_backup_$DATE.tar.gz”给脚本执行权限并加入定时任务crontabsudo chmod x /usr/local/bin/backup-jenkins.sh # 每天凌晨2点执行备份 sudo crontab -l | { cat; echo “0 2 * * * /usr/local/bin/backup-jenkins.sh”; } | sudo crontab -恢复如果需要恢复停止Jenkins服务将备份的tar.gz文件解压覆盖到JENKINS_HOME目录确保权限正确然后启动服务即可。对于大型或关键的生产环境建议定期将备份文件同步到异地存储。走到这里你已经完成了一个生产可用的Jenkins服务器的搭建和基础加固。从环境准备、安装启动、初始化配置到创建第一个任务、排查常见问题最后进行安全与运维层面的加固这套流程覆盖了从入门到进阶的核心环节。记住Jenkins的强大在于其插件生态和流水线Pipeline的灵活性后续你可以围绕具体的编程语言Java/Python/Node.js和部署目标物理机/Docker/Kubernetes去探索更复杂的自动化场景。最重要的永远是动手实践在不断的构建、失败、排查、成功中你会真正掌握持续集成与持续交付的精髓。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价