如果您不习惯使用Jenkins,不妨尝试一下JPom
JPom以其轻量、易用、灵活的特点,为缺少专业运维团队的中小型开发团队提供了完美的解决方案。它降低了运维门槛,提高了部署效率,让开发者能够从繁琐的运维工作中解放出来,更专注于业务代码的编写。无论是个人开发者、创业团队还是中小型企业,如果你正在寻找一款简单实用的项目部署管理工具,JPom都值得尝试。它的开源特性还意味着你可以根据团队的具体需求进行定制开发,打造最适合自己的自动化部署平台。
在开发团队的日常工作中,常常面临这样的困境:缺少专职的运维人员,开发人员不得不身兼多职,既要编写代码,又要负责从构建、部署到监控的繁琐运维工作。不同项目需要不同的构建命令和部署脚本,开发、测试、生产多环境的管理更是增加了复杂性。团队往往需要借助多个独立工具——SSH工具远程连接、FTP传输文件、手动同步多台服务器的账号密码——这些重复且分散的操作,不仅效率低下,也容易出错。虽然市面上存在一些自动化部署工具,但往往对服务器资源要求高、搭建复杂,且难以根据团队实际需求进行个性化定制或二次开发。JPom,一种轻量、易用、可自主掌控的解决方案,能够让开发人员从这些重复劳动中解放出来。
安装部署
截至目前,官网的版本为2.11.12,接下来将按照该版本进行部署。
环境要求:
-
JDK 8+
-
内存:512MB以上
-
MYSQL (建议)
安装步骤:
官网已提供相关的安装步骤,以下是我个人在安装过程中的更详细说明。
下载安装包
https://jpom.top/pages/all-downloads/
解压文件
得到2个安装包 server-2.11.12-release.zip,agent-2.11.12-release.zip
安装服务端(192.168.0.95)
上传 server-2.11.12-release.zip 到安装目录 /opt/soft/jpom 并解压 ,得到文件目录如下
├── bin ├ ├── BlockListener.sh ├ ├── Server.bat ├ ├── Server.sh ├ ├── Service.sh ├── conf ├ ├── application.yml ├ ├── logback.xml ├── lib ├ ├── server-2.11.12.jar ├── LICENSE
在├── conf 目录下,新增一个文件application-mysql.yml 用来做数据持久化。这一步可选,根据自己的要求选择适当的数据存储,默认是H2。
jpom:
db:
# 数据库默认 支持 :H2、MYSQL、MARIADB、POSTGRESQL
mode: MYSQL
url: jdbc:mysql://127.0.0.1:3306/jpom
# 数据库账号 默认 jpom
user-name: jpom
# 数据库密码 默认 jpom 如果自行配置请保证密码强度
user-pwd: jpom
更改目录权限,执行安装服务脚本。
sudo chmod -R 755 /opt/soft/jpom/bin
/opt/soft/jpom/bin/Service.sh install
这样,服务就已经安装好了,设置自启动
systemctl enable jpom-server
启动服务
systemctl start jpom-server
安装代理端(192.168.0.236)
上传 agent-2.11.12-release.zip 到安装目录 /opt/soft/jpom 并解压 ,得到文件目录如下
├── bin ├ ├── Agent.bat ├ ├── Agent.sh ├ ├── BlockListener.sh ├ ├── Service.sh ├── conf ├ ├── application.yml ├ ├── logback.xml ├── lib ├ ├── agent-2.11.12.jar ├── LICENSE
在├── conf 目录下,修改application-mysql.yml,主要是密码设置一个,这样不用每次都生成随机的,不好维护,其他配置可以不改变。
jpom:
# jpom 数据存储路径, 如果调试模式运行默认路径为【${user.home}/jpom/】,安装运行默认为jar包文件的父级
path:
authorize:
# agent 端管理账号,必填。
agent-name: jpomAgent
# agent 端管理密码,非必填,如果为空Jpom 会自动生成一串随机字符串当密码
agent-pwd: 123456
更改目录权限,执行安装服务脚本。
sudo chmod -R 755 /opt/soft/jpom/bin
/opt/soft/jpom/bin/Service.sh install
这样,服务就已经安装好了,设置自启动
systemctl enable jpom-agent
启动服务
systemctl start jpom-agent
常用功能与实战示例
默认系统Web管理后台端口是2122。浏览器输入 http://192.168.0.95:2122/ (换成你的IP)
服务器维护

SSH管理

Docker管理

如果docker配置报错,需要修改的地方,进入/etc/systemd/system/multi-user.target.wants目录,修改docker.service 文件

然后修改/etc/docker/daemon.json文件,修改如下

仓库信息

脚本列表
这里的脚本需要分发到每个节点。这样分发到脚本的服务器就可以运行这个脚本文件。

脚本的内容就是用来启动某个微服务的jar包,仅供参考,具体根据实际项目。
#!/bin/bash
export JAVA_HOME=/usr/local/soft/jdk1.8.0_351
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH:
log_file="${PROJECT_PATH}/../${PROJECT_ID}.log"
#是否开启skywalking
SKYWALKING_PARAM=""
if [[ "${SKYWALKING}" = "y" ]]; then
echo "开启skywalking探针"
SKYWALKING_PARAM="-javaagent:/opt/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=${PROJECT_ID} -Dskywalking.agent.instance_name=${DEFAULT_ENV} -Dskywalking.collector.backend_service=elk.homgar.com:11800"
fi
#是否自定义端口号
PORT_PARAM=""
if [[ "${PORT}" != "" ]]; then
PORT_PARAM="--server.port=${PORT}"
fi
# See how we were called.
function start() {
PIDS=`ps -ef | grep java | grep "$PROJECT_PATH" |awk '{print $2}'`
if [ -n "$PIDS" ]; then
echo "> 进程运行中PID: $PIDS"
fi
if [ ! -f $Log ]; then
touch $Log
fi
#获取JAR包的名称以及版本号,按文件名从小到大排序| head -n 3
LOCAL_JARS=(`ls -l ${PROJECT_PATH} | awk '{print $9}'| sort -k1.1r | grep -E "*-[0-9]+.[0-9]+.[0-9]+.jar"`)
if [[ ${#LOCAL_JARS[@]} == 0 ]]
then
echo "ERROR:没有找到JAR包"
exit 0
else
echo "共查找到以下JAR包 >>>>> ${LOCAL_JARS[@]}"
fi
#取最新的JAR包
TARGET_JAR=${LOCAL_JARS[0]}
RUN_TEXT="java ${SKYWALKING_PARAM} -Duser.timezone=Asia/Shanghai -jar ${JVM_PARAM} ${PROJECT_PATH}/${TARGET_JAR} --spring.profiles.active=${DEFAULT_ENV} ${PORT_PARAM}"
#echo "${RUN_TEXT}"
nohup ${RUN_TEXT} > $log_file 2>&1 &
sleep 1
local line_count=1
local found=false
while ! $found; do
local content=$(sed -n "${line_count},\$p" "$log_file")
# 检查是否读到内容
if [ -z "$content" ]; then
empty_count=$((empty_count + 1)) # 空内容计数器+1
if [ $empty_count -ge 5 ]; then
echo "连续5次读取到空内容,文件已读完"
break
fi
else
empty_count=0 # 重置计数器(读到有效内容)
# 统计实际读取的行数并更新行号
local lines_read=$(echo "$content" | wc -l)
line_count=$((line_count + lines_read))
# 检查是否包含“启动成功”
if echo "$content" | grep -q "启动成功"; then
found=true
fi
# 输出当前读取的内容(可选)
echo "$content"
fi
sleep 3 # 每次读取间隔3秒
done
}
function restart() {
stop
start
}
function stop() {
PIDS=`ps -ef | grep java | grep "$PROJECT_PATH" |awk '{print $2}'`
if [ -n "$PIDS" ]; then
echo "> 停止进程PID: $PIDS"
kill -9 $PIDS
else
echo "服务未启动"
fi
}
function status()
{
PIDS=`ps -ef | grep java | grep "$PROJECT_PATH" | awk '{print $2}'`
if [ -n "$PIDS" ]; then
# 检查进程是否有监听端口
PORT_INFO=$(ss -tunlp | grep "pid=$PIDS" | awk '{print $5}' | awk -F: '{print $NF}')
if [ -n "$PORT_INFO" ]; then
echo "running:$PIDS"
else
echo "not running:$PIDS (no listening port detected) boot is stopped"
fi
else
echo "boot is stopped"
fi
}
# See how we were called.
case "$1" in
start)
start
;;
restart)
restart
;;
stop)
stop
;;
status)
status
;;
*)
usage
;;
esac
exit 0
项目管理

上面配置需要提前为机器配置授权目录(如项目路径),后面的DSL配置如下
description: h------------n
run:
start:
scriptId: 5aa----------------------f3b5ce
scriptArgs: start
scriptEnv:
"DEFAULT_ENV": dev
"JVM_PARAM": '-Xms256M -Xmx512M'
"SKYWALKING": 'y'
restart:
scriptId: 5aa----------------------f3b5ce
scriptArgs: restart
scriptEnv:
"DEFAULT_ENV": dev
"JVM_PARAM": '-Xms256M -Xmx512M'
"SKYWALKING": 'y'
status:
scriptId: 5aa----------------------f3b5ce
scriptArgs: status
stop:
scriptId: 5aa----------------------f3b5ce
scriptArgs: stop
file:
# 备份文件保留个数
# backupCount: 5
# 限制备份指定文件后缀(支持正则)
# backupSuffix: [ '.jar','.html','^.+\.(?i)(txt)$' ]
# 项目文件备份路径
# backupPath: /data/jpom_backup
# 是否开启差异备份(仅备份变动过的文件)
# diffBackup: true
config:
# 是否开启日志备份功能
# autoBackToFile: true
构建列表




服务监控
假如配置5秒钟监控一次服务的健康情况,出问题发到企业微信群。

如果你给用户配置了邮箱,它也同时给用户发送邮件。前提是你要配置服务器的邮件地址(在配置管理--邮箱配置里面设置)
常见问题解决
Q1:JPom服务无法启动
# 检查端口占用
netstat -tlnp | grep 2122
# 查看日志
tail -f /opt/jpom/logs/application.log
# 常见原因:JDK版本不兼容、端口被占用、权限不足
Q2:SSH连接服务器失败
# 检查项:
1. 服务器SSH服务是否运行:systemctl status sshd
2. 防火墙是否开放22端口
3. JPom服务器能否ping通目标服务器
4. SSH密钥是否正确配置
Q3:构建过程内存不足
# 修改JPom启动参数
vim /opt/soft/jpom/bin/start.sh
# 增加JVM参数
JAVA_OPTS="-Xmx1024m -Xms512m"
总结
JPom以其轻量、易用、灵活的特点,为缺少专业运维团队的中小型开发团队提供了完美的解决方案。它降低了运维门槛,提高了部署效率,让开发者能够从繁琐的运维工作中解放出来,更专注于业务代码的编写。
无论是个人开发者、创业团队还是中小型企业,如果你正在寻找一款简单实用的项目部署管理工具,JPom都值得尝试。它的开源特性还意味着你可以根据团队的具体需求进行定制开发,打造最适合自己的自动化部署平台。
更多推荐



所有评论(0)