别再踩坑! Linux安装Jenkins+Gitee(完结版)

发布于:2025-09-06 ⋅ 阅读:(21) ⋅ 点赞:(0)

在工作中经常会使用到Jenkins,能持续集成,持续部署,可以说非常丝滑。 一直想搭建一套CI/DI,方便自己研究学习时,不用再花费太多的时间在部署上,能快速的部署到虚拟机或者上云。作者之前根据网上很多教程学习搭建,期间碰倒很多问题,特地整理文档并记录部署时出现的问题,用以做记录和学习。

一、前言(重要)

写在前面:目前很多旧的安装教程使用的Jenkins站点镜像都无法使用了,作者踩了不少雷,总结一些坑点
1.确保你要安装的Jenkins版本对应的镜像仓库有对应的版本的插件列表文件(否则自动安装插件会有问题)
2.如果采用手动上传插件方式,先确认好是否兼容当前安装版本的Jenkins(避免插件不兼容)

例如: 作者在选择jenkins版本是2.496,需要先查看镜像仓库是不是有对应版本的元数据文件update-center.json,可根据下文中提供的镜像仓库地址自行选择对应版本。

  • "元数据文件"下载插件时需要配置站点镜像用到
  • update-center.json 是 Jenkins官方提供的插件中心元数据文件,包含了所有可用插件的信息(版本、依赖关系、下载地址等)。Jenkins会定期从该文件获取插件列表。

二、环境选择

1.Linux版本: CentOS Linux release 7.6.1810 (Core)
2.Jenkins版本: Jenkins 2.496
3.JDK版本: OpenJDK 17
4.镜像仓库安装包地址: 阿里云镜像Jenkins仓库
5.update-center.json插件元数据文件地址: Jenkins插件列表地址

三、Jenkins安装

1.war包下载

两种下载方式,一种是官网下载,一种是阿里云下载
(1)官网下载地址: Jenkins官网
(2)阿里镜像仓库下载: 阿里云镜像仓库
作者是在阿里仓库下载的2.496版本,可自行选择下载方式和版本
war下载列表

2.上传到服务器

jenkins.war上传到服务器上
jenkins目录

3.启动war包

1.新建一个jenkins-ctrl.sh,这里需要替换一下实际安装的JDK17的目录即可。

作者构建的项目用的是JDK8,而这个版本的Jenkins是需要JDK17的,这里会产生影响,所以准备了一个脚本使用JDK17单独启动Jenkins。

jenkins-ctrl.sh脚本

#!/bin/bash
# 使用 nohup 实现进程挂起,并记录日志
JAVA_BIN="/usr/lib/jvm/java-17-openjdk/bin/java"
JENKINS_WAR="jenkins.war"
LOG_FILE="jenkins.log"
PORT="8081"

case "$1" in
    start)
        nohup ${JAVA_BIN} -jar ${JENKINS_WAR} --httpPort=${PORT} > ${LOG_FILE} 2>&1 &
        echo "Jenkins started. PID: $!  Log: $(pwd)/${LOG_FILE}"
        ;;
    stop)
        PID=$(pgrep -f "java.*jenkins.war.*${PORT}")
        if [ -n "${PID}" ]; then
            kill ${PID}
            echo "Jenkins stopped (PID: ${PID})"
        else
            echo "Jenkins is not running"
        fi
        ;;
    status)
        PID=$(pgrep -f "java.*jenkins.war.*${PORT}")
        if [ -n "${PID}" ]; then
            echo "Jenkins is running (PID: ${PID})"
        else
            echo "Jenkins is not running"
        fi
        ;;
    *)
        echo "Usage: $0 {start|stop|status}"
        exit 1
        ;;
esac

按以下命令创建一个sh脚本,并执行sh脚本

#1.列出所有已安装JDK,找到JDK17路径
sudo update-alternatives --list

#2.将.sh脚本放在war同级目录下,记得修改正确的JDK17路径
此处略

# 3.赋予执行权限
chmod +x start_jenkins.sh

# 4.Jenkins的操作命令如下,这里只需要执行"启动服务"即可
# 启动服务
./jenkins-ctrl.sh start
# 查看状态(可跳过)
./jenkins-ctrl.sh status
# 停止服务(可跳过)
./jenkins-ctrl.sh stop

# 5.检查JENKINS使用的JDK版本(可跳过,需要时可查看)
ps aux | grep jenkins.war | grep java

# 6.检查当前系统使用的JDK版本(可跳过,需要时可查看)
sudo update-alternatives --config java

# 7.查看输出的日志
more jenkins.log   #历史日志
tail -100f jenkins.log #实时查看日志

如果需要检查系统JDK版本,效果如图
JDK使用情况

2.打印的日志,需要关注打印的密码
Jenkins启动日志

4.登录Jenkins管理页面并配置

1.这里因为我是在虚拟机上,就不用放通端口,并且防火墙已关闭。如果是在云服务器上需要放通端口后,才能访问到管理页面
输入秘钥界面

2.选择“选择插件来安装”,默认是从国外的镜像下载插件,会比较慢,
步骤图
3.随即点击“无”,点击“安装”
步骤图
4.创建一个管理员账号(此处略过),随后一直默认“下一步”即可
完成页面

四、插件安装

作者第一次图方便一键推荐安装,下载的插件都出现大量的依赖问题,查阅大量博主的教程,却发现各位博主教程很少出现插件依赖问题,作者也是一直觉得是运气问题。

回归正题,我们进入开始配置插件

1.进入插件管理页面

Manage Jenkins---->Plugins
进入插件管理

2.配置新的镜像地址

,这里注意选择的版本是否对应,这里输入镜像地址:

https://mirrors.jenkins.io/updates/dynamic-2.496/update-center.json

在这里插入图片描述

3.重启Jenkins

地址栏输入IP:端口/restart,点击页面"Yes" 即可重启Jenkins
重启页面

4.查看插件

再次进入插件配置页,点击Available plugins,可以查看到插件,说明配置成功
插件列表页

5.下载插件

插件 作用 备注
*Gitee 码云插件 使用码云做代码仓库时选择
GitLab Plugin GitLab插件 使用GitLab做代码仓库时选择
*publish over ssh 使用ssh协议发送文件插件 一般采用ssh协议发送协议

1.以安装publish over ssh为例。首先搜索 publish over ssh,点击Install
安装插件
2.耐心等待安装,安装完成后再勾选“Restart”,重启一下Jenkins
安装插件图
3.再次登录Jenkins,能在Installed plugins搜索到,说明安装成功。
插件列表

五、Jenkins配置

作者目的只需要Jenkins打Jar包,PUSH后远程服务器运行Jar包即可

主要步骤如下
1.配置Gitee,拉取代码,Maven构建Jar包
2.配置SSH,用于推送到Jar包到远程服务器目录
3.执行构建脚本,运行Jar包

1.配置Gitee插件

1.1 获取私人令牌

登录gitee生产私人令牌
gitee民百

1.2.配置Gitee插件

1.2.1进入Manage Jenkins—>System配置---->Git配置
Git配置
1.2.2点击Add添加私人令牌
在这里插入图片描述
1.2.3 点击"测试链接",显示"成功"表示配置成功,点击最下方Sava保存配置即可。
Gitee成功图片

2.部署Maven插件

2.1.上传maven压缩包并解压

这里自行上传并解压到目录
maven解压图

2.2.配置环境变量

1.执行以下命令添加环境变量

1.添加环境变量
vim ~/.bash_profile

2.配置环境变量
例如:
# 用户环境变量
export MAVEN_HOME=/usr/maven/apache-maven-3.8.5  # 先定义 MAVEN_HOME

# 更新 PATH(将 $MAVEN_HOME/bin 添加到最后)
PATH=$PATH:$HOME/bin:$MAVEN_HOME/bin

3.使环境变量生效
source ~/.bash_profile


2.3.验证maven
echo $MAVEN_HOME    # 应输出 /usr/maven/apache-maven-3.8.5
echo $PATH          # 应包含 ...:/usr/maven/apache-maven-3.8.5/bin
mvn -v              # 验证mvn命令,应显示Maven版本信息

至此Maven安装,配置完成。

2.4 配置Jenkins的maven

进入Manage Jenkins—>Tools—>Maven Configuration
maven配置

3.配置JDK

3.1上传OpenJDK(此处略过)
3.2Jenkins配置JDK
进入Manage Jenkins—>Tools—>JDK installations 配置路径
在这里插入图片描述

4.构建一个测试项目

1.创建一个ITEM后,进入Configure—>General配置Source Code Management,先添加一个凭证,后配置仓库地址

在这里插入图片描述
2.添加一个Credentials

ps: 如果令牌不存在,就重新添加并选择,如果还不行就直接选择添加gitee的账号密码并选择。作者这里就是选择不到,只能添加一个账号,密码的凭证

Credentials
3.添加MAVEN构建命令
配置maven命令
4.构建一下
点击Build Now,构建后可点击Builds列表查看构建情况
在这里插入图片描述
点击Console output实时查看构建日志

补充遇到的问题

  • 问题1: JDK使用的是17,出现构建失败的情况,

    • 这里上文补充了怎么使用不同JDK启动Jenkins和构建maven
  • 问题2: 镜像下载后,依然出现类找不到的情况

    • 作者检查了maven中的setting配置,发现上传的maven仓库的地址使用的是Windows的配置,切换Linux中的目录即可
  • 问题3: 镜像下载慢,这里建议使用国内的镜像(可能会有人忽略此处的配置导致下载慢)

    • 同理也是调整maven的setting配置远程仓库地址

在这里插入图片描述
至此,Jenkins能构建Maven项目并成功打包,接下来配置需要将Jar文件推送的远端服务器。可以看看打包后的情况,如图
在这里插入图片描述

5.配置SSH

5.1 首先配置个全局的SSH

进入点击Manage Jenkins—>选择System配置,滑到最底部,找到SSH Servers
SSH配置

配置项 释义
NAME 定义一个容易区分的别名
HostName 配置远程服务的IP
Username SSH登录的用户名
Remote Directory 远程服务的目录

如图需要勾选“Use password authentication, or use a different key”选项后输入密码,点击Test Configuration,显示"Success",则配置成功,最后点击“Save”保存配置

Use password authentication, or use a different key:三种验证方式 • Passphrase / Password:如果配置了密钥或密钥的路径,则这是与加密密钥一起使用的密码。
如果没有配置密钥,那么这将是用于密码认证的密码。
• Path to key:在Jenkins主机上的位置,使用私有SSH密钥。
该路径可以是密钥的绝对路径,也可以是相对于JENKINS_HOME目录的绝对路径。
•Key:将私钥粘贴到此框中。关键应该包括页眉和页脚线(----)以及之间的所有内容。

配置图片
在这里插入图片描述
特别注意:这里的Remote Directory中的配置,当前配置的全局的远端文件的父路径路径。后续对单个ITEM做配置时,实际上做为父路径,例如ITEM中的SSH配置的Remote Directory为second_project,那么实际put的全路径为"父路径+second_project"

5.2.配置ITEM的SSH

1. 选择Triggers---->Build Steps---->Add build step后,选择"Send files or execute commands over SSH"
在这里插入图片描述
2. 根据需要,配置Source files等配置后,点击Save即可,可参照作者的配置。
在这里插入图片描述
3. 字段含义

名称 作用 示例
Source files(源文件) 需要传输的文件或目录路径(相对于 Jenkins 工作区) 后端: target/.jar:传输工作区 target 目录下的所有 JAR 文件。
前端: dist/**/
:传输 dist 目录及其子目录下的所有内容
Remove prefix(移除前缀) 从源文件路径中移除指定的前缀,避免在远程服务器上创建不必要的目录。 如果源文件是 target/app.jar,且 Remove prefix 设为 target/,则远程路径会直接传输 app.jar,而不是创建 target 目录。
Remote directory(远程目录) 文件传输到远程服务器的目标目录(相对于 SSH 插件全局配置中设置的 Remote Directory) 如果全局配置的远程目录是 /opt/jenkins,此处设为 deploy,则文件会传输到 /opt/jenkins/deploy。
Exec command(执行命令) 文件传输完成后,在远程服务器上执行的命令。 例如执行java -jar xxx.jar命令

详情可查阅地址Jenkins官方Publish+Over使用教程

5. 示例
这里只需要将jar包上传到远程的服务器,并准备了一个shell脚本,并执行shell脚本即可

#!/bin/bash

# 配置变量
port=8082
JAR_PATH="/home/java/pro/second_project/xxx.jar" #这里调整为自己的jar包
LOG_FILE="/home/java/pro/second_project/output.log"

# 函数:检查命令是否存在
check_command() {
  if ! command -v "$1" &> /dev/null; then
    echo "错误: 未安装 $1"
    exit 1
  fi
}

# 检查依赖命令
check_command lsof
check_command java

# 查找并杀死旧进程
echo "正在查找端口 $port 的进程..."
pid=$(lsof -t -i :$port -s TCP:LISTEN)

if [ -n "$pid" ]; then
  echo "正在终止进程 PID: $pid"
  kill -9 "$pid"
  # 等待进程退出
  while lsof -t -i :$port -s TCP:LISTEN >/dev/null; do
    sleep 1
    echo "等待进程退出..."
  done
fi

# 启动应用
echo "开始启动应用..."
nohup  java -jar "$JAR_PATH" --server.port=$port > "$LOG_FILE" 2>&1 &
echo "完成启动应用..."
#添加可执行权限
chmod +x /home/java/pro/start.sh

完整配置情况
完整配置
特别注意: 以下此项最好开启,方便配置错误,能在控制台打印日志
在这里插入图片描述

六、完成部署

1.构建成功效果图

在这里插入图片描述

2.构建成功日志

在这里插入图片描述

3.运行情况

在这里插入图片描述

七、总结

至此,踩了无数坑后,终于搭建完成,可以为自己鼓个掌啦~~~~~~。


网站公告

今日签到

点亮在社区的每一天
去签到