【Linux】使用Jenkins + svn + springboot自动构建jar包并自动打包在服务器上运行

👨🎓博主简介
🏅云计算领域优质创作者
🏅华为云开发者社区专家博主
🏅阿里云开发者社区专家博主
💊交流社区:运维交流社区 欢迎大家的加入!
🐋 希望大家多多支持,我们一起进步!😄
🎉如果文章对你有帮助的话,欢迎 点赞 👍🏻 评论 💬 收藏 ⭐️ 加关注+💗
文章目录
- 运行环境说明
- 一、创建一个maven项目
- 1.1 安装必要的插件【必须】*
- 1.2 创建maven任务
- 二、配置maven项目
- 2.1 maven项目中的配置项详解
- 2.1.1 General
- 2.1.2 源码管理
- 2.1.3 构建触发器
- 2.1.4 构建环境
- 2.1.5 Pre Steps(准备步骤)
- 2.1.6 Build(构建)
- 2.1.7 Post Steps(发布步骤)
- 2.1.8 构建设置
- 2.2 配置maven项目
- 2.2.1 服务器需要提前安装:
- 2.2.2 配置全局系统配置
- 2.2.3 配置全局工具配置
- 2.2.4 先写一个描述(可写可不写)
- 2.2.5 创建源码管理(svn方式)
- 2.2.6 保存配置
- 三、构建maven项目
- 3.1 build(构建)项目
- 3.2 构建完成
- 3.3 构建报错总结:
- 3.3.1 关于maven版本问题报错
- 3.3.2 关于jdk版本配置的问题
- 四、构建完自动在服务器中运行
- 4.1 在项目中配置Post Steps(发布步骤)
- 4.2 自动构建jar包并运行
- 五、动构建打包jar包并运行完成
运行环境说明
| 运行环境 | 运行版本 | 作用 |
|---|---|---|
| 操作系统 | centos 7.8 | 运行Jenkins的基础环境 |
| jenkins版本 | 2.419 | 用于构建项目及其他自动化 |
| maven版本 | 3.8.6 | 用于构建jar包 |
| jdk版本 | 18、1.8 | 18(用于运行Jenkins)、1.8(用于运行jar包) |
一、创建一个maven项目
1.1 安装必要的插件【必须】*
- maven
- git
- ssh
- svn
一般在部署完成,访问的时候选择默认安装插件基本都会装 – git。
点击 Manage Jenkin –> Plugins(插件) --> Available plugins(商店)



- 搜索
git和maven和ssh和svn进行安装;
git 和 ssh 我这里已经有了,需要更新就更新一下;


maven、svn 我这里没有,就安装一下吧;

安装完成之后,在新建Item 那块就可以看到maven了。如下↓

svn

1.2 创建maven任务
- 新建
Item– > 选择maven项目,起一个任务名称。

创建完之后,就到了这个页面

二、配置maven项目
下面来讲解一下maven项目里的配置项。
2.1 maven项目中的配置项详解
2.1.1 General
项目描述,可以在这块写一些项目的描述。

2.1.2 源码管理
主要是拉取源码用的,这里有两种,一种是
git,一种是svn方式。等下我们创建项目使用的是svn方式。

这个不仅Jenkins项目上要安装git插件,在服务器上也需要安装git。
yum -y install git
2.1.3 构建触发器
默认勾选上的是下面的选项:Jenkins将会去寻找之前已经构建过的pom依赖(如果有之前构建过的相同的pom文件),直接使用之前的镜像,便不会再去重新的解析了

2.1.4 构建环境
在这里面,勾选上对应的内容,将去做一些额外的处理,在这里保持默认的,什么都不去勾选

这是翻译后的,可根据实际情况来使用。

2.1.5 Pre Steps(准备步骤)
准备步骤,一般会选择Execute shell 和 Invoke Gradle script。

2.1.6 Build(构建)

2.1.7 Post Steps(发布步骤)
这个配置,说明的是:在项目构建完成之后,接下来需要做的内容
在这里,我们需要将构建完的项目,打成的包传到我们的测试服务器上,也是在这里去进行配置的
2.1.8 构建设置
这里可以配置电子邮件通知。比如失败,成功,都可以进行发送邮件来通知提醒。
2.2 配置maven项目
2.2.1 服务器需要提前安装:
如果是使用git部署,服务器上也需要安装git;
-
jdk1.8
-
maven
-
jdk:根据自己的项目选择所需的jdk版本,我的项目是需要
jdk11以上,用的是jdk18才可以;
如果是需要jdk1.8,并且Jenkins是按照我的部署文档部署的,那么默认就会有jdk1.8,可以使用find / -name java找一下java的安装路径,将绝对路径配置到全局工具配置里就行;如果没有安装,需要安装一下;可参考:Linux中安装jdk1.8和配置环境变量 -
maven:根据自己的项目选择所需的mvn版本,我的项目是需要
maven3.8才可以;
maven环境默认是没有的,也需要在服务器安装一下,可参考:【Linux】Centos安装mvn命令(maven),建议使用maven3.8,下载地址:https://pan.baidu.com/s/1drjw-sQ5JKFukamVSsLqtw?pwd=b1a0
2.2.2 配置全局系统配置
Manage Jenkins --> System

- 配置ssh环境
提示:如果找不到ssh在哪,可以使用
ctrl+f搜索一下;

2.2.3 配置全局工具配置
Manage Jenkins --> Tools

- maven配置
在项目开始前,我们安装了maven,所以maven使用默认的配置就行,所以这块不用改。
如果服务器有多个maven,需要用到这时候就需要重新配置一下了,配置的时候到maven的setting.xml路径,比如/usr/local/maven/apache-maven-3.8.6/conf/setting.xml。

然后我们拉到最下面可以看到还有一个maven,这个需要配置一下;
找到Maven安装 --> 点击新增Maven --> 配置maven路径即可;

- jdk配置
找到JDK安装 --> 点击新增JDK --> 配置jdk路径即可;

配置完之后保存。
2.2.4 先写一个描述(可写可不写)
进入刚刚创建的maven项目,选择配置,跳到这个页面;

2.2.5 创建源码管理(svn方式)


2.2.6 保存配置
配置完之后,点击保存

三、构建maven项目
3.1 build(构建)项目
保存完之后,看到左边有一个build now,然后点击build(构建)就可以了;

构建的时候可以查看构建过程,F5 刷新一下页面

往下拉,看到这个,点进去,然后点击控制台输出,就可以看到构建过程了。


3.2 构建完成
出现Finished: SUCCESS 就是构建完成了。

同时,最上面也会变成一个绿色的对号;

构建完之后就可以在服务器上查看了,以下是存放到服务器的路径。

3.3 构建报错总结:
3.3.1 关于maven版本问题报错
如果在build的时候遇到此报错,是因为maven版本的问题;

3.3.2 关于jdk版本配置的问题
如果在build的时候遇到此报错,是因为jdk版本配置的问题;

四、构建完自动在服务器中运行
4.1 在项目中配置Post Steps(发布步骤)
这就是在build完之后,需要进行什么操作,在这里写。
可以使用ssh方式或者shell方式;
ssh和shell其实都一样,都是写命令的;
ssh还需要配置全局变量,虽然上面已经配置了,但是我一般经常用shell方式,看自己选择吧。
这里以shell方式举例。
首先,需要返回刚刚的项目中进行配置;

- 找到
Post Steps

- 选择执行shell,写个shell脚本(也可以使用ssh方式,自己定义)


- shell 脚本内容
提示:如果要运行jar包的话,必须在脚本里添加:BUILD_ID=DONTKILLME 环境变量,防止执行完自动化构建jar包程序自动停止问题。
#!/bin/bash# (必须)配置一个环境变量,防止执行完自动化构建jar包程序自动停止问题
BUILD_ID=DONTKILLME# 源jar包及路径
src_jar="/root/.jenkins/workspace/mytest_maven/target/cs.jar"
# 目标jar及包路径
dest_jar="/application/cs.jar"
# 目标jar包路径
dest_path="/application/"# 创建目标路径
mkdir -p /application/# 将打包完的jar包复制过去
## 先判断jar包是否存在,如果存在则备份,如果不存在,则直接复制过去运行。
if [ -e $dest_jar ];thenecho "存在此文件,开始备份,重新复制:$(date +"%Y-%m-%d")"mv $dest_jar $dest_jar-$(date +"%Y-%m-%d")cp -ar $src_jar $dest_jar
elseecho "目标路径没有这个文件,直接复制过去"cp -ar $src_jar $dest_jar
ficd $dest_path
# 检测jar包进程,这里直接写jar包名称,因为如果引用上面的环境变量,是路径加jar包名,如果在服务器上但启动的话,可能会找不到,所以需要直接写jar包名称。
jar_jin=$(ps -ef | grep -v grep | grep -ic cs.jar)if [ "$jar_jin" -ge "1" ];thenecho "检测到进程,先杀掉,后启动"ps -ef | grep -v grep | grep cs.jar | awk -F " " '{print $2}' | xargs kill -9java -jar $dest_jar --server.port=9999 >> app.log &
elseecho "未检测到jar包进程,直接启动"java -jar $dest_jar --server.port=9999 >> app.log &
fi
配置完之后,点击保存;

4.2 自动构建jar包并运行
- 点击构建(Build Now)

F5刷新一下,可看到最新的构建运行

- 点击进入,查看控制台输出。

输出Finished: SUCCESS 则为执行成功。

执行成功之后我们进入到服务器中,查看一下服务是否启动,可以查看端口是否启动或者jar包进程是否启动
ps -ef | grep cs.jarnetstat -anput | grep 9999
端口和jar包进程都存在,则可以去做访问页面之类的操作了。
如果访问不到,需要确认服务是否正常启动或防火墙端口是否开启。
这样自动构建打包jar包并运行就完成了。
五、动构建打包jar包并运行完成
相关文章:
【Linux】使用Jenkins + svn + springboot自动构建jar包并自动打包在服务器上运行
👨🎓博主简介 🏅云计算领域优质创作者 🏅华为云开发者社区专家博主 🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 🐋 希望大家多多支…...
数据库、OS内核安全等精彩继续!龙蜥大讲堂 5 月直播预告来袭
「龙蜥大讲堂」5 月精彩预告来了,点击下方海报抢先了解。本月又是满满的技术干货分享,多位大咖带你共享技术盛宴!直播地址:http://live.bilibili.com/24798267 5 月精彩分享直达 👇 直播主题及内容介绍 一࿱…...
ubuntu20文件安装和卸载cuda11.6
搜索cuda 11.6 nvidia,进入官网https://developer.nvidia.com/cuda-11-6-0-download-archive 选择linux --> runfile 用安装包安装 wget https://developer.download.nvidia.com/compute/cuda/11.6.0/local_installers/cuda_11.6.0_510.39.01_linux.run sudo s…...
如何备份firewalld的配置信息?
要备份Firewalld的配置信息,您可以通过以下步骤进行: 备份配置文件: Firewalld的配置文件位于/etc/firewalld/目录下。您可以使用cp命令来备份这些文件到其他位置,例如: cp -r /etc/firewalld/zones /path/to/backup…...
我们该如何看待AIGC(人工智能)
引言 人工智能(AI)是当今世界科技发展的前沿领域之一,它正在以前所未有的速度和规模影响着我们的生活、工作和思考方式。AIGC,即人工智能生成内容(Artificial Intelligence Generated Content),…...
POWERBI==官网教程
地址 COVID-19 tracking sample for US state and local governments - Power BI | Microsoft Learn 已经非常全面了...
自然语言处理(NLP)技术有哪些运用?
目录 一、自然语言处理(NLP)技术有哪些运用? 二、Python进行文本的情感分析 1、NLTK库: 2、TextBlob库: 三、错误排除 一、自然语言处理(NLP)技术有哪些运用? 自然语言处理(NLP)…...
java spring 09 Bean的销毁过程 上 在docreatebean中登记要销毁的bean
1.Bean销毁是发送在Spring容器关闭过程中的 AnnotationConfigApplicationContext context new AnnotationConfigApplicationContext(AppConfig.class);UserService userService (UserService) context.getBean("userService");userService.test();// 容器关闭cont…...
杰发科技AC7801——支持的纠错功能
1. 复位寄存器保留复位类型 低压检测复位(LVD Reset) 集成了一个低压保护系统,以便在电源电压发生变化期间保护存储器内容和控制 MCU 系统状态。该系统由上电复位(POR)电路和 LVD 电路组成,LVD 可以配置为不同的复位基准&#x…...
spring boot运行过程中动态加载Controller
1.被加载的jar代码 package com.dl;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplication public class App {public static void main(String[] args) {SpringApplication.run(A…...
学习软考----数据库系统工程师25
关系规范化 1NF(第一范式) 2NF(第二范式) 3NF(第三范式) BCNF(巴克斯范式) 4NF(第四范式) 总结...
RTMP 直播推流 Demo(一)—— 项目配置与视频预览
音视频编解码系列目录: Android 音视频基础知识 Android 音视频播放器 Demo(一)—— 视频解码与渲染 Android 音视频播放器 Demo(二)—— 音频解码与音视频同步 RTMP 直播推流 Demo(一)—— 项目…...
安卓获取SHA
1:安卓通过签名key获取SHA 方式有两种, 1、电脑上来存在eclipse的用户或正在使用此开发工具的用户就简单了,直接利用eclipse 走打包流程,再打包的时候选择相应的签名,那么在当前面板的下面便会出现签名的相关信息。 2、…...
【Qt 学习笔记】Qt常用控件 | 输入类控件 | Dial的使用及说明
博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt常用控件 | 输入类控件 | Dial的使用及说明 文章编号:Qt…...
【C语言】项目实践-贪吃蛇小游戏(Windows环境的控制台下)
一.游戏要实现基本的功能: • 贪吃蛇地图绘制 • 蛇吃食物的功能 (上、下、左、右方向键控制蛇的动作) • 蛇撞墙死亡 • 蛇撞自身死亡 • 计算得分 • 蛇身加速、减速 • 暂停游戏 二.技术要点 C语言函数、枚举、结构体、动态内存管…...
在做题中学习(50):搜索插入位置
35. 搜索插入位置 - 力扣(LeetCode) 解法:二分查找 思路:题目是有序的,时间复杂度O(logN),二分没跑了,题目说如果找不到target,返回它应该被插入位置的下标,所以可以分析一下示例2&…...
【mysql】mysql单表查询、多表查询、分组查询、子查询等案例详细解析
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...
【Gateway远程开发】0.5GB of free space is necessary to run the IDE.
【Gateway远程开发】0.5GB of free space is necessary to run the IDE. 报错 0.5GB of free space is necessary to run the IDE. Make sure that there’s enough space in following paths: /root/.cache/JetBrains /root/.config/JetBrains 原因 下面两个路径的空间不…...
普通组件的注册-局部注册和全局注册
目录 一、局部注册和全局注册-概述 二、局部注册的使用示例 三、全局注册的使用示例 一、局部注册和全局注册-概述 组件注册有两种方式: 局部注册:只能在注册的组件内使用。使用方法:创建.vue文件,在使用的组件内导入并注册。…...
Apache Dubbo知识点表格总结
Dubbo是一个高性能的Java RPC框架,它提供了一系列的功能来支持分布式系统的开发。通常用于微服务之间的服务调用,顺便提一下也是用于微服务之间调用的OpenFeign,OpenFeign是Spring Cloud体系中的一个声明式HTTP客户端,用于简化HTT…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
