Jpom 简介
官网介绍:简而轻的低侵入式在线构建、自动部署、日常运维、项目监控软件。
它能做什么
- 项目管理:创建、启动、停止、实时查看项目控制台日志,管理项目文件;
- 节点管理集群节点:统一管理多节点的项目,实现快速一键分发项目文件;
- ssh 终端:在浏览器中执行 SSH 终端,方便进行日常运维,记录执行命令记录;
- 在线构建:在线拉取 GIT、SVN 仓库快速构建项目包,不用运维人员手动上传项目包;
- 在线脚本:在线管理脚本、定时执行脚本、webhook 钩子执行、执行日志等;
- DOCKER 管理:在线管理镜像、容器、SWARM 集群。界面化管理 DOCKER;
- 用户管理:多用户管理,实现不同用户不同权限,用户操作、管理日志完善记录;
- 项目监控:实时监控项目当前状态、如果异常自动触发邮件、钉钉报警通知;
- NGINX 配置、SSL 证书:在线快速方便的修改 NGINX 配置文件,SSL 证书统一管理;
系统环境
#server端和agent端需要 java (>=1.8)环境
openjdk version "1.8.0_262"
CentOS Linux release 7.4.1708 (Core)
jpom v2.10.12
下载与安装
经过安全测试,个人感觉离线安装比较方便,方便对批量安装agent端 (agent端可能存在公网网络隔离),可以通过systemd管理。
#提前准备好java环境
下载链接:https://jpom.top/pages/all-downloads/
#安装server端
解压server-2.10.6-release.tar.gz 解压后到安装目录
# 设置开机自启
bash "./bin/Service.sh" install enable
systemctl start jpom-server.service
systemctl enable jpom-server.service
-----------------------------------------------------------------------
#安装agent端
解压agent-2.10.6-release.tar.gz 解压后到安装目录
# 设置开机自启
bash "./bin/Service.sh" install enable
systemctl start jpom-agent.service
systemctl enable jpom-agent.service
server port: 2122
agent port: 2123
安装目录说明:https://jpom.top/pages/4756ec/#%E9%9C%80%E8%A6%81%E5%87%86%E5%A4%87%E7%9A%84%E7%8E%AF%E5%A2%83
server端数据目录说明:https://jpom.top/pages/6f2c0b/#h2-h2-database%E3%80%81h2database
关于配置文件调整:
常用的配置见: 启动参数 | Jpom
建议:
使用mysql作为db存储,不建议采用默认H2,尽管jpom支持H2 每日备份和导出,支持H2迁入到mysql
server端的data修改到数据盘中,
安装目录、日志目录不能 软链的方式,会导致后台访问不了
agent 端 application.yml 配置文件统一密码,方便批量安装。
关于目录结构
#默认安装目录 /usr/local/jpom-xxxx
├── conf => 配置文件目录
├──── application.yml => springboot 核心配置文件
├──── logback.xml => logback 日志配置文件
├── bin => 项目管理命令目录
├── data => 服务端数据目录文件
├── db => 服务端数据存储文件夹(H2)
├── logs => 项目日志目录
└──── lib/xxxxx.jar => 项目运行 jar 文件
-----------------------------------------
#服务端数据目录文件夹说明(https://jpom.top/pages/6f2c0b/)
├── data
├────── build => 构建相关文件夹
├──────────── a7edf3cff8d542d3bf5758f9ab9b9a32 => 单个构建存储相关文件夹
├──────────────── history => 需要执行的脚本
├───────────────────── #1 => 单次执行记录相关文件夹
├─────────────────────── info.log => 构建日志
├─────────────────────── result => 构建产物存储文件夹
├──────────────── source => 构建的仓库文件夹
├────── script => 服务端脚本文件夹
├──────────── a7edf3cff8d542d3bf5758f9ab9b9a32 => 脚本对应相关文件夹
├──────────────── script.sh => 需要执行的脚本
├──────────────── log => 执行日志
├────── command_log => ssh 脚本执行记录
├──────────── a7edf3cff8d542d3bf5758f9ab9b9a32 => 单个脚本相关文件夹
├──────────────── 004d320e00794d63831d63e3a5ed4344 => 脚本批量执行日志
├────── backup_old_data => 2.7.x 升级 2.8.x 迁移数据备份文件夹
├────── agent => 服务端保留插件的 jar 包文件夹
├────── remote_version.json => 远程更新,获取信息版本缓存文件信息
├────── docker => docker 相关文件
├──────────── tls-cert => docker tls 证书文件保存路径
├────── temp => 临时文件,上传文件缓存目录,运行中产生
├── db => 服务端数据存储文件夹
├────── backup => 备份数据文件夹
├──────────── 20220609120000.sql => sql 文件
├────── recover_backup => 执行修复数据后的原数据库备份文件夹
├──────────── 2022-06-10 09/16/38 => 单次备份文件夹
├──────────────── Server.mv.db => 数据库文件
├──────────────── Server.trace.db => 数据库文件
├────── execute.init.sql.log => #记录已经初始化过 sql hash,避免重复初始化数据库 重装需要清除
├────── Server.mv.db => 数据库文件
└────── Server.trace.db => 数据库文件
升级
关于升级,agent也需要同步升级,未升级可能会出现状态错误
https://download.jpom.top/release/2.10.44/jpom-2.10.44.zip
#server 端
systemctl stop jpom-server.service
备份:/bin/cp -rfp server server-2.10.12
centos系统 主要涉及如下几个文件,解压完成后,对比修改并替换文件
bin/Service.sh
bin/BlockListener.sh
bin/Server.sh
conf/logback.xml
conf/application.yml
普通用户 修改权限:chown www.www * -R
systemctl start jpom-server.service
#agent端
systemctl stop jpom-agent.servic
备份:/bin/cp -rfp agent agent-2.10.12
centos系统 主要涉及如下几个文件,解压完成后,对比修改并替换文件
bin/Agent.sh
bin/Service.sh
conf/logback.xml
conf/application.yml
普通用户 修改权限:chown www.www * -R
systemctl start jpom-agent.service
功能测试(jpom v2.10.12)
系统管理中:主要使用 用户管理、系统管理
用户管理:
多用户管理,实现不同用户不同权限,用户操作、管理日志完善记录;
登录安全:支持MFA二次验证,支持防暴力登录账号机制配置
user:
# 用户连续登录失败次数,超过此数将被限制登录
always-login-error: 5
# IP连续登录失败次数,超过此数将被限制登录
always-ip-login-error: 10
# 当ip连续登录失败,锁定对应IP时长,5h、1d
ip-error-lock-time: 5h
# 是否强制提醒用户开启 mfa
force-mfa: false
权限组:普通用户权限,可以对不同的工作空间进行独立的权限控制
普通发布用户给与 执行权限和 下载权限 即可,
权限并不能很清楚对应的菜单与功能
时段控制:有需求再添加
普通用户添加:只能在创建的时候生成随机密码
新用户与用户修改密码:新用户建议修改密码(复杂密码16位以上)
通知地址:报警联系人通知方式,
管理日志:修改或执行的操作会记录,点开详情可以查看的到请求消息和返回消息
系统管理:
主要使用工作空间、也包含主要的在线操作功能、在线查看日志、在线修改系统配置与在线升级
工作空间:以工作空间为基础做权限和应用的隔离
功能管理中:主要使用 在线构建、ssh管理、脚本管理、监控管理
在线构建:
支持回滚功能:生产环境不推荐使用回滚,优先采用重新发版。
支持拉取 GIT、SVN仓库 支持 SSH 方式发布、支持定时构建、支持 WebHook 形式触发构建
添加仓库信息:优先使用GIT、 帐号信息推荐token的方式避免用户信息泄露
添加构建:
缓存构建目录 关闭!!! 清理发布产物,避免发布旧版本文件
构建方式:本地构建
构建命令:主要是发布前编译等操作
git rev-parse --short HEAD
mvn3.2.5 package -Dmaven.test.skip=true -Pprod -T2 -am
产物目录:需要发版的文件或者目录,
target/sadbop.prod.jar
发布操作:SSH
发布的SSH:ssh主机
发布目录:服务部署目录
发布命令:发布同步文件之后的操作,如启动和修改文件权限等
chown www.www /export/www/sadbop -R
systemctl reset-failed sadbop-api.service
systemctl restart sadbop-api.service
清空发布:上传新文件前,会将项目文件夹目录里面的所有文件先删除后再保存新文件
缓存构建目录:每次构建都将重新拉取仓库代码
保留产物:构建完成后是否保留构建产物相关文件,用于回滚
差异构建:防止重复构建
WebHooks:调用其他WebHooks服务
定时构建:支持cron格式
事件脚本:构建过程执行对应的脚本,推送事件消息( 可选)
附加环境变量:
构建历史:配置文件配置保存份历史记录,提供下载日志和产物
# 构建相关配置
build:
# 最多保存多少份历史记录
max-history-count: 1000
# 单个最多保存多少份历史记录
item-max-history-count: 50
怎么发版
怎么才能同一个版本重新发
提交同一个版本发布会报构建失败 ‘仓库代码没有任何变动终止本次构建:’
如何避免构建失败发送旧产物
当新的构建报错而没有生成构建产物,发布构建正常,但服务器上的文件尚未更新
SSH 管理:使用ssh key的方式连接发布机器,提供命令执行与文件查看功能
文件目录:
授权可直接访问的目录,多目录回车换行即可
SSH名称:
当前SSH连接名称,建议使用IP/域名/hostname命名
host:
当前SSH连接服务器的IPPort:
当前SSH端口,默认22,请填22
用户名:
当前服务器登陆账户
认证方式:
选择 证书
私钥内容:
密钥,可以不随jpom机器系统用户的key, 只要能登录发版机器即可(如不是用系统key之后,jpom机器是无法登录发版机器,只能通过jpom)
脚本管理:测试主要用来做事件通知,支持shell
描述内容就是构建过程执行对应的事件
[startReady]='准备构建' \
[pull]='拉取仓库代码' \
[executeCommand]='执行构建命令' \
[packageFile]='打包产物' \
[release]='发布产物' \
[finish]='开始执行 构建结束' \
[stop]='发布前中断' \
[success]='发布结束' \
[done]='构建结束' )
监控管理:监控列表配置与项目管理有关联,所以仅配置操作监控,
监控用户:所有
监控功能:所有
监控操作:所有
警报联系人:系统管理员
v2.10.12测试后存在的问题
- 构建不能暂停,不能定制化构建流程
- 回滚功能不是全流程 不能触发事件脚本
- 构建功能触发事件脚本不能传自定义参数
- 脚本 和shell命令的exit 异常退出码 但构建仍然进行
- 不能支持项目权限分配
- 帐号不支持支持 LDAP/SSO