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

简介

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

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

相关博客,如下:

配置环境

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

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

(1)Maven配置

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

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

(2)Git配置

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

(3)JDK配置

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

构建项目

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

Step1:创建任务

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

确定,进入下一步。

Step2:详细设置

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

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

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

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

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

shell 复制代码
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 路径下。

shell 复制代码
#!/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 没有权限。

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

java 复制代码
chmod 775 start_app.sh

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

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

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

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

更多

指定分支构建

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

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

第一步,添加一个Git参数

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

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

跨服务器构建

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

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

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

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

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

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

相关推荐
Trouvaille ~1 小时前
【Linux】网络层与IP协议详解:从地址到路由的完整指南
linux·运维·服务器·网络·tcp/ip·路由器·网络层
袁袁袁袁满2 小时前
Ubuntu怎么查看系统日志?
linux·运维·服务器·ubuntu
礼拜天没时间.2 小时前
Docker与Harbor迁移实战:从入门到生产级完整指南
linux·运维·docker·容器·架构·centos
babe小鑫2 小时前
大数据运维与管理专业学习数据分析的必要性
大数据·运维·学习
开开心心_Every2 小时前
剪切板工具存500条,可搜索备份导入导出
linux·运维·服务器·华为od·edge·pdf·华为云
zsyf19872 小时前
Linux部署Redis集群
linux·运维·redis
2301_816073832 小时前
RHCA扩展
linux·运维·服务器·虚拟机启动
e***13623 小时前
linux 设置tomcat开机启动
linux·运维·tomcat
coollove74824 小时前
Linux下PostgreSQL-12.0安装部署详细步骤
linux·运维·postgresql