使用 Jpom 自动化构建并部署项目

1、前言

Jpom 是一款专为开发者设计的轻量级运维工具。它提供了一整套从项目构建到自动部署,再到日常运维和项目监控的解决方案,帮助开发者更好地管理和维护项目。

Jpom 的目标是让开发者不再为复杂的运维流程头疼。它支持多种安装方式,灵活应对不同的使用场景,无论你是小型团队还是个人开发者,都能轻松上手。

本文只介绍使用 Jpom 工具来实现我们项目的自动化部署,包含前端项目和后端Java项目,其余与之无关的功能不多做介绍,因为Jpom的功能还是很多的,不一定都用得上,只挑对自己有用的就行。另附上官网和项目地址,有兴趣的小伙伴可以自行研究。

  • Jpom 官网:Jpom:一款原生 ops 软件
  • 项目地址:dromara/Jpom

2、安装(Linux)

2.1、有 JDK

系统中已经有 JDK 并且配置环境变量、使用默认路径安装(注意:需要有 sudo 权限、建议在 root 用户使用)

默认安装路径:

/usr/local/jpom-server/

执行:

curl -fsSL https://jpom.top/docs/install.sh | bash -s Server default

2.2、无JDK

系统中没有 JDK、期望自动安装 JDK8、使用默认路径安装(注意:服务器需要有公网下使用)

Jpom 服务端默认安装路径:

/usr/local/jpom-server/

JDK 默认安装路径:

/usr/java/xxxx

执行:

curl -fsSL https://jpom.top/docs/install.sh | bash -s Server jdk+default

2.3、自动安装服务

期望自动将服务端注册到系统服务中,来达到开机自启动或者用服务的方式来管理

curl -fsSL https://jpom.top/docs/install.sh | bash -s Server jdk+default+service

安装完成后会自己启动,且默认的端口为2122:
在这里插入图片描述

当我们看到这条日志就代表启动成功了:

在这里插入图片描述


3、使用

3.1、登录

上述安装完成后默认端口为2122,直接访问地址:

服务器IP:2122

第一次登录需要你初始化系统,如图:
在这里插入图片描述

创建账号和密码,点击创建账号进入下一步,然后会提示你两步验证,如果是正式环境,建议验证一下,如果是学习使用,可以直接忽略。

在这里插入图片描述

然后进入系统,如图:

在这里插入图片描述

3.2、配置Git仓库

依次点击:在线构建 -> 仓库信息 -> 新增,如图:

在这里插入图片描述

在弹出框中输入你的仓库信息,点击保存。

在这里插入图片描述

3.3、后端项目构建

依次点击:在线构建 -> 构建列表 -> 新增,如图:

在这里插入图片描述

第一步选择构建方式,注意构建方式一旦选择完毕后不可更改(即点完保存后不可修改构建方式,只能删除重新创建)。具体每种构建方式的意思网站中已解释得非常清楚,自行查看,这里我选择本地构建,然后下一步:

在这里插入图片描述

构建的基础信息:

  • 名称:为当前的构建取一个名称,这里我先演示后端项目的构建
  • 分组名称:为当前构建选择一个分组,没有可以不选
  • 源仓库:选择我们刚才新增的Git仓库
  • 分支:选择拉取的分支
  • 标签:需要拉特定TAG的话需要选择,只拉取最新提交的话此处不填
  • 克隆深度:自定义克隆深度,一般用于仓库数据量很大,并且很多数据对于构建项目无用的情况

在这里插入图片描述
填写好后点击下一步,进行流程构建。

  • 构建命令:填写构建项目的命令,如:
mvn clean package -DskipTests -Dcheckstyle.skip -U -Pprod
  • 产物目录:打包好的Jar存放于你项目的位置,比如你仓库拉取的项目名称为sgsp,sgsp下还有一层目录为sgsp-admin,而打包完的jar存放于sgsp-admin中的target目录下,这里就只需填

sgsp-admin/target/**.jar

  • 环境变量:定义你需要的环境变量,我这里不需要则没填
  • 执行方式:选择默认即可
    在这里插入图片描述

填写好后点击下一步,进行发布操作。

  • 发布操作:这里选择本地命令,即在服务器直接执行发布后命令。
  • 发布后命令:表示打完包后,执行的命令,这里的命令主要包括三个步骤。
    (1)移动jar包至我们服务器上的项目路径
    (2)切换到Jar包的路径
    (3)执行启动项目脚本
echo "--------------------------移动sgsp-admin.jar包至/home/sgsp/service--------------------------"
# 注意此处的15a17a01ec60446581bcdce461f9cf88目录是先构建一次后,jpom会创建一个文件夹用于存放构建产物,可以通过第一次构建时的日志查看,当然你也可以直接在构建完后的目录移动Jar包
mv /usr/local/jpom-server/data/build/15a17a01ec60446581bcdce461f9cf88/source/sgsp-admin/target/sgsp-admin.jar /home/sgsp/service/
echo "--------------------------切换目录到/home/sgsp/service/--------------------------"
cd /home/sgsp/service/
echo "--------------------------执行启动脚本 start.sh--------------------------"
sh start.sh

在这里插入图片描述

在这里插入图片描述
附:start.sh

#!/bin/bash# 1、常量
LOG_PATH=/home/sgsp/service/log.out     # 日志输出位置
JAVA_PATH=/www/server/java/jdk1.8.0_371  # JDK位置
PROJECT_MANAGER_PATH=/home/sgsp/service/sgsp-admin.jar  # 后端项目位置
SERVER_PORT=8080 # 服务端口
# 记录开始时间
echo -e "\e[34m ==================start【$(date +"%Y-%m-%d %H:%M:%S")】================== \e[0m" >> $LOG_PATH# 2、启动项目的函数
function start_project {nohup $JAVA_PATH/bin/java -jar -Dserver.port=$SERVER_PORT $PROJECT_MANAGER_PATH >>$LOG_PATH 2>&1 &
}# 3、获取进程ID
PID=$(pgrep -f $PROJECT_MANAGER_PATH)# 4、判断进程是否存在
if pgrep -f $PROJECT_MANAGER_PATH > /dev/null
thenecho "进程存在,关闭项目,然后重启~" >> $LOG_PATHkill "$PID"sleep 5kill -9 "$PID" > /dev/null 2>&1start_project
elseecho "进程不存在,启动项目" >> $LOG_PATHstart_project
fi# 记录结束时间
echo -e "\e[34m ==================end【$(date +"%Y-%m-%d %H:%M:%S")】================== \e[0m" >> $LOG_PATH

配置好后点击下一步,进行其他配置。

在这里插入图片描述

其他配置中定时构建比较常用,可以在指定的时间定时构建项目并发布。根据自己的项目需要进行配置,配置好后点击保存。

之后点击列表数据的构建,选择直接构建开始构建项目,如果有错误或者构建不成功,可以根据日志自行进行排查。

3.4、前端构建项目

构建方式、基础信息与构建后端项目一致,不做赘述。
流程构建:

  • 构建命令
echo "正在切换到sgsp-ui目录"
cd sgsp-ui
echo "开始执行构建命令 npm run build:prod"
npm run build:prod
  • 产物目录

sgsp-ui/dist

在这里插入图片描述
发布操作

  • 发布操作:选择本地命令
  • 发布后命令:如下
echo "--------------------------正在切换到sgsp-ui目录--------------------------"
cd sgsp-ui
ls
echo "--------------------------删除原有文件--------------------------"
rm -rf /home/sgsp/front/*
echo "--------------------------移动dist文件夹至/home/sgsp/front/--------------------------"
mv /usr/local/jpom-server/data/build/6eb23bcb49114a70a3f47d1fe046cd4e/source/sgsp-ui/dist /home/sgsp/front/dist
cd /home/sgsp/front/dist
pwd
ls
echo "--------------------------前端工程构建完成--------------------------"

在这里插入图片描述
点击保存,之后点击列表数据的构建,选择直接构建开始构建项目。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/411428.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RoboCat: A Self-Improving Generalist Agent for Robotic Manipulation

发表时间:22 Dec 2023 论文链接:https://readpaper.com/pdf-annotate/note?pdfId4836882796542689281&noteId2413286807916664832 作者单位:Google DeepMind Motivation:受视觉和语言基础模型的最新进展的启发&#xff0c…

【教程】实测np.fromiter 和 np.array 的性能

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 目录 函数简介 np.fromiter np.array 测试代码 实验结果 结果分析 实验总结 学长想说 函数简介 np.fromiter np.fromiter 是 NumPy 提供的一…

设计模式 -- 装饰者模式(Decorator Pattern)

1 问题引出 1.1 咖啡馆订单项目 咖啡种类/单品咖啡:Espresso(意大利浓咖啡)、ShortBlack、LongBlack(美式咖啡)、Decaf(无因咖啡) 调料:Milk、Soy(豆浆)、Chocolate 要求在扩展新的咖啡种类时,具有良好的扩展性、改动方便、维护方便 使用…

无人机之云台的作用

无人机云台在无人机技术中扮演着至关重要的角色,其作用主要体现在以下几个方面: 一、 确保拍摄稳定性 防抖动:无人机在飞行过程中,尤其是在复杂环境下,如遇到风力干扰或进行高速飞行时,机身容易产生震动和…

Beyond Compare忽略特定格式文本,忽略匹配正则表达式

一 概述 文本对比时忽略某些文本。比如有些生成的文件需要做差异对比,除了内容有差异外,自动生成的ID也不同,想忽略这些ID。特别是文件内容比较多的时候。 如上图,其中UUID“*”的部分我想忽略。 二 方法 方法1 通过Beyond Co…

MySQL 中间件 MySQL-Router

目录 1 MySQL-Router 的介绍 2 MySQL-Router 负载均衡 2.1 设计目的: 2.2 HAProxy 与 Nginx 和 MySQL-Router 之间的区别 2.3 MySQL-Router 的优势 3 MySQL-Router 的获取 3 MySQL-Router 的使用 3.1 实验环境 3.2 MySQL-Router 部署 3.3 MySQL-Router 配置 3.4 测…

HarmonyOS--合理使用动画

一、概述 动画是应用开发中必不可少的部分,它可以使应用程序更加生动和易于互动,一方面可以提升用户体验、增强视觉吸引力,另一方面可以引导用户操作、提高信息传达效率。应用程序中,页面层级间的转场、点击交互、手势操控都可以添…

ODOO17文档打印(输出)方案 -- ODOO17 document printing (output) scheme

根据使用场景不同,ODOO17支持以下几种文档打印(输出)方案: According to different usage scenarios, ODOO17 supports the following document printing (output) schemes: 1、QWEB ODOO原生打印功能(生成PDF文档) odoo使用的主…

【AI】:探索在图像领域的无限可能

欢迎来到 破晓的历程的 博客 ⛺️不负时光,不负己✈️ 文章目录 图像识别与分类的飞跃图像生成与创造的艺术图像增强与修复的神奇图像搜索与理解的智能图像分析与挖掘的洞察图形生成技术1. 生成对抗网络(GANs)2. 卷积神经网络(CN…

多语言跨领域迁移学习的新框架:MAD-X

人工智能咨询培训老师叶梓 转载标明出处 多语言模型如mBERT和XLM-R通过零样本或少样本跨语言迁移极大地推动了低资源语言的NLP应用。但这些模型由于容量限制,对低资源语言和未见语言的迁移性能并不理想。为了解决这一问题,来自德国达姆施塔特工业大学、…

Stable Diffusion详解

文章目录 前言一、LDM原理二、模型结构三、模型训练与推理总结 前言 Stable Diffusion在图像生成方面取得了很大的成功,其核心原理是LDM(Latent Diffusion Models),在论文《High-Resolution Image Synthesis with Latent Diffusio…

【数据结构】优先级队列 — 堆

文章目录 前言1. 优先级队列1.1 概念1.2 特性 2. 堆2.1 概念2.2 存储方式 3. 堆的模拟实现3.1 堆的创建3.2 堆的插入3.3 堆的删除 4. PriorityQueue4.1 注意事项4.2 构造器介绍4.3 常用方法介绍 5. 经典题型6. 结语 前言 我们之前学习过队列,它是遵循先进先出原则的…

halcon 深度学习软件工具安装以及用法

安装halcon 20版本以上得 以为这个版本以上得有异常检测,分割,分类,目标检测,都有 一、下载软件 可以再官网下载,但是官网要注册账号 下载区域: MVTec Software 不用官方的账号 就下载安装包 链接:http…

day13JS-MoseEvent事件

1. MouseEvent的类别 mousedown :按下键mouseup :释放键click :左键单击dblclick :左键双击contextmenu :右键菜单mousemove :鼠标移动mouseover : 鼠标经过 。 可以做事件委托,子元素可以冒泡…

使用Blender进行3D建模—基础操作笔记

Blender 3D 建模🚀 在博0阶段,目前已经完成立创EDA的PCB绘制的基础学习,树莓派的系统安装远程控制能学习,加上我本硕阶段学习的单片机和深度学习人工智能算法的知识,这里打算补上一块比较重要的能力拼图,就…

Netty 学习笔记

Java 网络编程 早期的 Java API 只支持由本地系统套接字库提供的所谓的阻塞函数,下面的代码展示了一个使用传统 Java API 的服务器代码的普通示例 // 创建一个 ServerSocket 用以监听指定端口上的连接请求 ServerSocket serverSocket new ServerSocket(5000); //…

c++关于字符串的练习

提示并输入一个字符串&#xff0c;统计该字符串中字母个数、数字个数、空格个数、其他字符的个数 #include <iostream> #include<string> using namespace std;int main() {string s1;int letter0,digit0,space0,other0;cout<<"请输入一个字符串:"…

海康二次开发学习笔记5-二次开发小技巧

二次开发小技巧 1. VM安装目录 Samples内包含C#,QT,VC应用程序 Documetnations内包含C#和C语言的帮助文档 2. 错误码 private void button4_Click(object sender, EventArgs e){try{VmSolution.Load(textBox1.Text);listBox1.Items.Add("方案加载成功.");listBox1.…

质量技术AI提效专题分享-得物技术沙龙

活动介绍 本次“质量技术&AI提效专题分享”沙龙聚焦于质量技术和AI效率领域&#xff0c;将为您带来四个令人期待的演讲话题&#xff1a; 1、《智能化提效实践》 2、《仿真自动化在饿了么金融实践分享》 3、《得物精准测试提效应用》 4、《广告算法灰度拦截实践》 相信这些…

开源的工作流系统突出优点总结

当前&#xff0c;想要实现高效率的办公&#xff0c;可以一起来了解低代码技术平台、开源的工作流系统的相关特点和功能优势。作为较受职场喜爱的平台产品&#xff0c;低代码技术平台拥有可视化才做界面、灵活、好维护操作等多个优势特点&#xff0c;在推动企业流程化办公的过程…