前言

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

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

支持JDK对应列表

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

环境准备

  • 操作系统: 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 8和JDK 17)
    ps:分别将JDK 8和JDK 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. 安装插件:Locale 和 Chinese、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,配置name、hostname、username、Remote Directory,点击高级,将 秘钥 或 秘钥路径 填进对应的位置
    • 私钥:保密,用于自己身份认证。
    • 公钥:公开,用于配置在远程服务器上,允许你通过私钥登录。

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

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

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