前言

Jenkins 是一个开源的持续集成工具,广泛应用于自动化构建、测试和部署。本文将详细介绍如何在 Linux 系统中基于 JDK8 安装 Jenkins,包括所需命令和相关配置,帮助您快速搭建一个功能完善的 Jenkins 环境。

Jenkins官网地址
Jenkins 插件地址
Jenkins英文官网 war包最新版本下载,主要版本使用2.346.12.346.3
Jenkins中文官网 war包最新版本下载,主要版本使用2.346.12.346.3
Jenkins官网 rpm包下载,主要版本使用jenkins-2.346-1.1.noarch.rpm

支持JDK对应列表

ps:官网中有两个版本支线,Weekly周更版本 和 LTS长期成熟稳定支持版本,主要使用稳定的 LTS版本
如图所示,非常经典的版本2.346.1,这个版本同时支持 JDK8JDK11JDK17,使用的最广泛,也意味着坑最多

环境准备

  • 操作系统: Linux CentOS
  • Java 环境: JDK 8
  • Jenkins版本: jenkins-2.346.3(支持JDK 8)、jenkins-2.479.2(支持JDK 17)
  • Jenkins端口:9090

检查环境

  1. 更新系统

    首先,更新系统包管理器,以确保软件的最新性

    1
    sudo yum update -y
  2. 检查并安装 JDK 8

    如果没有安装,可以参考【Linux下安装JDK8

    1
    java -version

方式一:war包安装启动

  1. 下载 Jenkins 安装包

    前往Jenkins官网下载 war包,下载完成后将war包丢到服务器上,博主这里默认丢 /usrlocal/jenkins 目录下

  2. 启动 Jenkins

    --httpPort=9090 为端口号,可自行修改。ps:记得端口不要忘记放开

    1
    nohup java -jar /home/jenkins/jenkins.war --httpPort=9090 > /home/jenkins/jenkins.log &
  3. 查看日志

    jenkins.log中有admin的登录密码,这个一定要记住!!!

方式二:rpm包安装启动

rmp包相对于war包安装,多了一些配置文件,例如:
/etc/sysconfig/jenkins
/etc/init.d/jenkins

  1. 下载并上传rpm安装包

    官方RPM包下载
    下载完成后将rpm包丢到服务器上,博主这里默认丢 /usrlocal/jenkins 目录下

    1
    2
    mkdir /usr/local/jenkins
    cd /usrlocal/jenkins
  2. 安装rpm包
    1
    rpm -ivh jenkins-2.346-1.1.noarch.rpm
  3. 修改Jenkins配置,修改端口号
    1
    vim /etc/sysconfig/jenkins
    1
    2
    JENKINS_USER="jenkins"
    JENKINS_PORT="9090"
  4. 修改/etc/init.d/jenkins文件,配置jdk安装目录

    1
    2
    3
    4
    5
    6
    # 查询jdk目录,例如:/usr/java/jdk1.8.0_401/bin/java
    whereis java
    # 找到candidates变量,修改jenkins中的jdk目录
    vim /etc/init.d/jenkins
    # 重新加载配置文件
    systemctl daemon-reload

    关键配置项应包括以下内容(可以根据需要调整):

    1
    2
    3
    4
    JENKINS_HOME="/var/lib/jenkins"
    JENKINS_PORT="9090"
    JENKINS_USER="jenkins"
    JENKINS_JAVA_CMD="/usr/java/jdk1.8.0_401/bin/java"
  5. 启动Jenkins

    1
    2
    sudo systemctl start jenkins
    sudo systemctl status jenkins

方式三:兼容JDK17安装启动

  1. 下载 Jenkins 安装包

    最初服务器上的JDK版本是 JDK 8,Jenkins插件基本都用不了,所以博主打算兼容 JDK 17 版本
    思路:由于服务器还有一些 JDK 8 的项目,默认环境变量还是使用 JDK 8,只有在启动 Jenkins 时,使用 JDK 17。这也就意味着服务器上同时解压出来两个版本的JDK(JDK 8JDK 17
    ps:分别将JDK 8JDK 17解压到/usr/java目录下
    前往【Jenkins官网】下载 war包
    下载完成后将war包丢到服务器上,博主这里默认丢 /usrlocal/jenkins 目录下

    如果每次都手动切换JDK环境变量会很麻烦,所以需要写一个shell脚本进行自动化切换,并且输出log日志
    同时博主又为了启动过程美观,添加了进度条,让用户知道Jenkins是否已经启动成功

  2. 新建shell启动脚本
    修改start_jenkins.sh内容如下
    1
    2
    cd /usr/local/jenkins
    sudo nano start_jenkins.sh
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    #!/bin/bash

    # 设置启动路径
    START_PATH=$(pwd) # 当前工作路径
    # 设置日志文件路径
    LOG_FILE="$START_PATH/jenkins.log"
    # 临时设置 JDK 17 路径
    export JAVA_HOME=/usr/java/jdk-17.0.13
    export PATH=$JAVA_HOME/bin:$PATH
    # 启动 Jenkins,并将日志输出重定向到 jenkins.log 文件
    echo "正在启动 Jenkins JDK 17..." | tee -a "$LOG_FILE"
    java -jar /usr/local/jenkins/jenkins-2.463.war --httpPort=9090 >> "$LOG_FILE" 2>&1 &
    # 获取 Jenkins 进程的 PID
    JENKINS_PID=$!
    # 显示进度条的函数
    show_progress() {
    local duration=$1
    local interval=1
    local progress=0
    echo -n "等待Jenkins启动"
    while [ $progress -lt $duration ]; do
    sleep $interval
    progress=$((progress + interval))
    echo -n "#"
    done
    echo " 完成!"
    }
    # 设置等待时间(假设 Jenkins 启动时间为 30 秒,调整为实际启动时间)
    WAIT_TIME=30
    # 显示等待进度条
    show_progress $WAIT_TIME
    # 启动完成后,切换回 JDK 8
    echo "正在切换 JDK 8..." | tee -a "$LOG_FILE"
    export JAVA_HOME=/usr/java/jdk1.8.0_401
    export PATH=$JAVA_HOME/bin:$PATH
    # 打印当前使用的 Java 版本,并记录到日志文件
    echo "当前JDK版本: $(java -version)" | tee -a "$LOG_FILE"
    # 等待 Jenkins 进程结束
    wait $JENKINS_PID
  3. 启动shell脚本
    1
    2
    cd /usr/local/jenkins
    ./start_jenkins.sh

访问 Jenkins

默认访问地址:http://你的IP地址:9090

ps:首次登录时,需要输入管理员账号和密码。账户是admin,获取密码需要下面命令从服务器获取初始密码

1
sudo cat /var/lib/jenkins/secrets/initialAdminPassword

将显示的密码粘贴到浏览器中完成登录,并根据向导设置 Jenkins。

如果文件丢失或者无法访问,你可以尝试重新生成 Jenkins 的管理员密码
你可以通过删除 Jenkins 数据目录来强制 Jenkins 重置,并生成新的管理员密码。删除 /root/.jenkins 目录后,重新启动 Jenkins

1
2
sudo rm -rf /root/.jenkins
sudo systemctl restart jenkins

配置防火墙(如适用)

默认情况下,Jenkins 使用端口 8080。确保此端口未被占用,并配置防火墙以允许外部访问,博主默认是9090

1
2
sudo firewall-cmd --permanent --add-port=9090/tcp
sudo firewall-cmd --reload

卸载清空 Jenkins

  1. 停止 Jenkins 服务
    1
    2
    3
    4
    查看服务
    ps -ef|grep jenkins
    停掉进程
    kill -9 XXX
  2. 查找安装目录
    1
    find / -name "jenkins*"
  3. 删掉相关目录
    1
    2
    3
    4
    5
    6
    7
    8
    # 删掉相关安装目录
    rm -rf /root/.jenkins/
    # 删掉war包
    rm -rf /webapps/jenkinsapp/
    # 删掉剩余相关
    rm -rf /usr/lib/firewalld/services/jenkins.xml
    rm -rf /var/cache/yum/x86_64/7/jenkins
    rm -f /var/lib/yum/repos/x86_64/7/jenkins
  4. 确认已完全删除
    1
    find / -name "jenkins*"

安装插件

配置中文界面

  1. 安装插件:LocaleChinese、Locale
  2. 重启生效

安装和配置SSH

  1. 进入 Jenkins 插件管理页面
  2. 登录 Jenkins 管理控制台。点击 Manage Jenkins 。选择 Manage Plugins
  3. Available 标签下搜索 SSH Plugin 。勾选 SSH Plugin 并点击 Install without restart 进行安装。安装完成后,可以选择立即重启 Jenkins 使插件生效,或稍后重启。

    在使用私钥配置时,注意下流程:

    1. 在Jenkins服务器生成密钥对 ssh-keygen -m PEM -t rsa -b 4096,一般会在 /root/.ssh 生成 私钥id_rsa和 公钥id_rsa.pub 文件。
    2. 在Jenkins服务器执行 ssh-copy-id -i ~/.ssh/id_rsa.pub 用户名@目标服务器ip地址 将公钥复制到目标服务器(其他服务器)。
    3. 进入 Dashboard > Manage Jenkins > System > SSH Servers,配置namehostnameusernameRemote Directory,点击高级,将 秘钥秘钥路径 填进对应的位置
    • 私钥:保密,用于自己身份认证。
    • 公钥:公开,用于配置在远程服务器上,允许你通过私钥登录。

    如下图所示,在验证用户密码连接时成功,但使用 ssh私钥连接 则提示下面这个

    解决方案:向 目标服务器 推送 Jenkins服务器公钥 ,例如在 Jenkins服务器 上执行下面命令:

    1
    ssh-copy-id -i ~/.ssh/id_rsa.pub 用户名@目标服务器ip地址