使用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 操作可以移除。

相关推荐
爱吃橘子橙子柚子1 天前
3CPU性能排查总结(超详细)【Linux性能优化】
运维·cpu
舒一笑3 天前
程序员效率神器:一文掌握 tmux(服务器开发必备工具)
运维·后端·程序员
NineData3 天前
数据库管理工具NineData,一年进化成为数万+开发者的首选数据库工具?
运维·数据结构·数据库
梦想很大很大4 天前
拒绝“盲猜式”调优:在 Go Gin 项目中落地 OpenTelemetry 链路追踪
运维·后端·go
Sinclair4 天前
内网服务器离线安装 Nginx+PHP+MySQL 的方法
运维
叶落阁主4 天前
Tailscale 完全指南:从入门到私有 DERP 部署
运维·安全·远程工作
甲鱼9295 天前
MySQL 实战手记:日志管理与主从复制搭建全指南
运维
碳基沙盒7 天前
OpenClaw 多 Agent 配置实战指南
运维
蝎子莱莱爱打怪10 天前
Centos7中一键安装K8s集群以及Rancher安装记录
运维·后端·kubernetes
DianSan_ERP11 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet