Jenkins在Linux下如何高效部署
小樊
35
2025-11-22 13:29:36
Linux下高效部署Jenkins
一 部署选型与准备
- 选型建议
- 生产优先:使用Docker 容器化部署(环境一致、易备份与迁移、扩缩容简单)。
- 快速落地或无容器环境:使用系统包管理器安装(RPM/DEB),或直接运行 WAR 包。
- 基础依赖
- 安装并验证Java(推荐 OpenJDK 11/17):java -version。
- 安装Git、Maven(按项目需要),用于源码拉取与构建。
- 开放防火墙端口(默认 8080):firewall-cmd/ufw 放行或云安全组策略放行。
- 建议准备持久化存储(卷或目录)用于 JENKINS_HOME,避免数据丢失。
二 三种高效安装方式
- Docker 容器化(推荐)
- 安装 Docker 并可选配置镜像加速;启动容器时挂载 /var/jenkins_home、映射 8080/50000,并挂载 /var/run/docker.sock 以便容器内调用宿主机 Docker(按需)。
- 示例命令:
- docker run -d --name jenkins -p 8080:8080 -p 50000:50000
-v jenkins-data:/var/jenkins_home
-v /var/run/docker.sock:/var/run/docker.sock
-e JAVA_OPTS=“-Duser.timezone=Asia/Shanghai -Xmx2g -Xms512m”
jenkins/jenkins:lts
- 初始化密码:docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
- RPM 包安装(CentOS/RHEL)
- 添加官方仓库并安装:
- wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
- rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
- yum -y install jenkins
- 常用目录与配置:/usr/lib/jenkins/(WAR)、/etc/sysconfig/jenkins(端口、JENKINS_HOME、JAVA 路径等)、/var/lib/jenkins/(数据)。
- 启动:systemctl enable --now jenkins;若报 Java 未找到,编辑 /etc/init.d/jenkins 的 candidates 添加 $JAVA_HOME/bin/java。
- WAR 包运行(最快速)
- 前置:已安装 JDK 并验证 java -version。
- 启动:java -jar jenkins.war --httpPort=8080;后台:nohup java -jar jenkins.war --httpPort=8080 > jenkins.log 2>&1 &
- 日志:tail -f jenkins.log;首次解锁密码:/var/lib/jenkins/secrets/initialAdminPassword。
三 初始化与安全加固
- 首次访问与解锁
- 浏览器访问 http://:8080,使用文件 /var/lib/jenkins/secrets/initialAdminPassword 中的初始密码解锁。
- 选择安装推荐插件,创建管理员账户。
- 加速与基础配置
- 插件与更新站点可配置国内镜像源,显著提升下载速度。
- 全局工具配置:设置 JDK、Maven、Git 路径,避免构建时报“工具未就绪”。
- 安全建议
- 启用 HTTPS(反向代理或内置),禁用匿名访问,按团队划分权限矩阵。
- 谨慎处理“白屏”等问题:可在访问路径后加 /pluginManager/advanced 临时切换 http/https 并重启;必要时以 -Dhudson.util.ProcessTree.disable=true 启动以避免进程被误杀(仅排障用)。
四 自动化部署流水线示例
- 插件建议
- Pipeline、Git、Credentials Binding、SSH Pipeline Steps/Docker Pipeline(按场景选装)。
- 任务类型
- 推荐使用Pipeline(代码即流水线),从 SCM(Git) 拉取并在 Jenkinsfile 中定义流程。
- 示例 Jenkinsfile(Maven + SSH 发布)
- pipeline {
agent any
tools { maven ‘Maven-3’ jdk ‘OpenJDK-11’ } // 需在全局工具中预先配置
stages {
stage(‘Checkout’) { steps { checkout scm } }
stage(‘Build’) { steps { sh ‘mvn -B -DskipTests clean package’ } }
stage(‘Deploy’) {
steps {
sshPublisher(
publishers: [
sshPublisherDesc(
configName: ‘prod-ssh’,
transfers: [
sshTransfer(
sourceFiles: ‘target/*.jar’,
removePrefix: ‘target’,
remoteDirectory: ‘/opt/app’
)
],
verbose: true
)
]
)
}
}
}
}
- 触发方式
- 代码托管平台 Webhook(Push 触发)或 轮询 SCM(如每分钟 */1 * * * *)。
五 生产优化与常见问题
- 性能与稳定性
- 为 Jenkins 分配合理堆内存:如 -Xmx2g -Xms512m;必要时挂载 /var/run/docker.sock 让构建在容器内调用宿主机 Docker(注意权限与隔离)。
- 使用卷持久化 JENKINS_HOME,定期备份;分离构建与代理节点以扩展并发。
- 端口与冲突
- 默认 8080,如与 Tomcat 冲突可在 /etc/sysconfig/jenkins(RPM)中修改 JENKINS_PORT,或 WAR 启动时指定 –httpPort=xxxx。
- 常见故障排查
- 启动失败且提示 Java 未找到:在 /etc/init.d/jenkins 的 candidates 增加 $JAVA_HOME/bin/java 路径。
- 插件下载慢或失败:更换国内镜像源;构建时报“工具未就绪”:检查全局工具配置中的 JDK/Maven/Git 路径。