温馨提示×

Jenkins在Linux下如何高效部署

小樊
35
2025-11-22 13:29:36
栏目: 智能运维

Linux下高效部署Jenkins

一 部署选型与准备

  • 选型建议
    • 生产优先:使用Docker 容器化部署(环境一致、易备份与迁移、扩缩容简单)。
    • 快速落地或无容器环境:使用系统包管理器安装(RPM/DEB),或直接运行 WAR 包
  • 基础依赖
    • 安装并验证Java(推荐 OpenJDK 11/17):java -version。
    • 安装GitMaven(按项目需要),用于源码拉取与构建。
    • 开放防火墙端口(默认 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 路径。

0