使用Jenkins部署后端项目(Maven)

7 阅读4分钟

简介

Jenkins,是一款自动化部署的工具,使用它可以直接在控制台完成代码拉取、构建和部署,是大多数公司都具备的开发工具。

本文介绍如何使用 Jenkins 来部署后端项目。

相关博客,如下:

配置环境

Jenkins 搭建完成,需配置 Maven、Git、JDK。在 全局工具配置 中,如下,

在这里插入图片描述

有些设置需要插件支持,没有安装插件可能没有对应的设置。可参考下面这篇博客,导入博主使用的插件。

(1)Maven配置

有两处地方,第一处是 Maven 配置,设置 settings 路径。

在这里插入图片描述

第二处 Maven安装,设置成服务器 Maven 所安装的路径。

在这里插入图片描述

(2)Git配置

设置成系统 Git 可执行程序所在的路径,注意是 git 程序的路径,不是安装目录。

在这里插入图片描述

(3)JDK配置

设置成服务器 JDK 所在目录,不用到 bin 层级。

在这里插入图片描述

构建项目

以上配置完成,可以开始构建项目,以 Github 上的这个代码仓库(github.com/HeZhongYing…)为例。

在这里插入图片描述

Step1:创建任务

创建任务,如果是Maven项目,可选择 构建一个maven项目,否则,可选择 流水线构建一个自由风格的软件项目

在这里插入图片描述

确定,进入下一步。

Step2:详细设置

其实 Jenkins 只做三件事,1)拉代码;2)Maven构建;3)执行部署脚本。

所以在这个详细界面也就是配置做这些事所需要的设置,先来设置 Git。

在这里插入图片描述

Credentials 右侧的 添加,添加一个凭证。

在这里插入图片描述

选择 SSH 方式,这里也可以选择账号密码的方式(填 Git 仓库的账号密码)。

在这里插入图片描述

SSH 密钥对,可以在服务器上敲下面的命令生成,其中 ed25519 是密钥类型,"jenkins@centos7" 是密钥名称,可自定义。

ssh-keygen -t ed25519 -C "jenkins@centos7"

敲完后,连续敲三个回车,会在 ~/.ssh 目录下生成一对SSH密钥。

在这里插入图片描述

其中,

  • id_ed25519(密钥):配置在 Jenkins 上;

  • id_ed25519.pub(公钥):配置到代码仓库里;

配置完 Git,现在构建就能拉代码。接着对 Maven 进行配置,构建时使用 pom.xml 文件,执行 clean package -DskipTests 命令。

在这里插入图片描述

现在构建就会拉代码,并且执行 Maven 的 clean package -DskipTests 命令,生成对应的 jar 包。

接下来,在当前服务器上创建启动项目的脚本,这个脚本只做一件事,将前面构建完的 jar 包启动起来。

如下,文件名为 start_app.sh,放到 /home/projects 路径下。

#!/bin/bash

# 非常重要,参看:https://hezhongying.blog.csdn.net/article/details/158044582
export BUILD_ID=dontKillMe

APP_NAME="no_database_demo-1.0-SNAPSHOT"
JAR_PATH="/root/.jenkins/workspace/no_database_demo/target/${APP_NAME}.jar"
LOG_PATH="/var/log/${APP_NAME}.log"
PID_FILE="/var/run/${APP_NAME}.pid"  # 新增:定义PID文件路径
JAVA_CMD="/usr/local/dev/jdk-21.0.5/bin/java"

# --- 核心:通过PID文件杀死旧实例 ---
echo "正在停止所有旧的 $APP_NAME 进程..."
if [ -f "$PID_FILE" ]; then
    OLD_PID=$(cat "$PID_FILE")
    if ps -p $OLD_PID > /dev/null; then
        echo "停止进程 $OLD_PID..."
        kill $OLD_PID
        sleep 3
        if ps -p $OLD_PID > /dev/null; then
            kill -9 $OLD_PID
        fi
    fi
    rm -f $PID_FILE  # 删除旧PID文件
fi

# --- 启动新进程并写入PID文件 ---
echo "启动 $APP_NAME..."
nohup "$JAVA_CMD" -jar "$JAR_PATH" > "$LOG_PATH" 2>&1 &
NEW_PID=$!
echo $NEW_PID > $PID_FILE  # 写入新PID到文件
echo "启动成功,PID: $NEW_PID"

设置构建完执行这个脚本,如下,

在这里插入图片描述

Step3:立即构建

全部设置完,点保存,点 立即构建 验证下。

在这里插入图片描述

首次构建,Maven 要去拉一些依赖,有点慢,Just wait moment.

在这里插入图片描述

构建失败了,说执行 /home/projects/start_app.sh 没有权限。

在这里插入图片描述

丢,忘记给文件设置可执行权限了。

chmod 775 start_app.sh

如下,可执行的文件是绿色的。

在这里插入图片描述

再来一次。这回构建成功了。

在这里插入图片描述

打开浏览器,访问该项目的接口,能正常处理请求,说明构建成功。

在这里插入图片描述

服务器内可见这个 jar 进程。

在这里插入图片描述

更多

指定分支构建

一般来说,一个工程对应一个代码仓库,而构建是要指定分支的,有时我们想构建别的分支,就要手动改分支,太麻烦。

可通过下面这种方式,将分支参数化,每次构建时选择分支构建。

第一步,添加一个Git参数

在这里插入图片描述

第二步,构建时,分支名使用占位符,来自用户选择。

在这里插入图片描述

此时构建,会去获取该仓库的所有分支,让咱们选择一个分支构建。

在这里插入图片描述

跨服务器构建

通常,Jenkins 应用所在的服务器,与跑项目的不是同一台服务器。就是说,构建后的Jar包,要推送到业务服务器上部署。

此时就需要配置跨服务器构建。

第一步,先在 Jenkins 上配置目标服务器,进入系统管理-系统设置,滚动到最下面,如下,

在这里插入图片描述

设置完,点下面的 Test Configuration 验证下。

在这里插入图片描述

第二步,在需要跨服务器构建的工程里,增加 Pre Steps 配置。

在这里插入图片描述

如果这个工程只在目标服务器上部署,那么下面在本服务器执行的 Shell 操作可以移除。

在这里插入图片描述