名词解释
# 服务端(Server)
服务端可以理解为 Jpom 的一个总控系统,用户直接访问对应系统管理所有节点。一般情况服务端只需要安装一次即可,服务端可以管理多个插件端
以下功能位于服务端(和插件端没有直接关系):
- 仓库管理
- 构建管理
- SSH 管理
- 监控管理
- 账号管理
温馨提示:在一定使用场景下只需要安装服务器即可,不一定需要搭配插件端才能使用 Jpom,如果使用 ssh 管理、构建发布到 ssh 中
# 插件端(Agent)
插件端可以理解为需要在 Jpom 被管理到服务器的守护程序,插件端主要是去监控对应服务器一些基本信息,保存一些项目信息已经对应项目的相关文件等。
已经安装插件端的服务器在 Jpom 中也可以称为节点
温馨提示:插件端存在账号密码,插件端端账号密码和服务端端管理员账号密码是不同的奥!
# 物理节点
安装过 Jpom 插件端的服务器可以称为物理节点
# 逻辑节点
安装过 Jpom 插件端的服务器添加在 Jpom 服务端中的节点列表里面称为逻辑节点
温馨提示:一个物理节点可以添加在多个工作空间
# 工作空间
- Jpom 中使用工作空间代替角色来控制数据权限,一个账号可以绑定多个工作空间,并且可以设置单个工作空间的功能权限
- Jpom 中主要使用工作空间隔离数据权限,建议在实际部署中使用工作空间来隔离权限。
温馨提示:一个物理节点可以添加在多个工作空间
如:
- 测试环境
- 线上环境
- ...
如:
- 前端开发
- 后端开发
- ...
# 端口:2122、2123
Jpom 中默认使用到端口有 2122、2123
- 2122 是服务端默认端口
- 2123 是插件端默认端口(添加节点地址时候需要填写对应到 IP:PORT)
特别声明:不建议将插件端端口开放到外网可以访问、建议服务端和插件端通信都使用内网
如何修改程序运行端口:
- 修改管理程序命令文件中
--server.port=2122
、--server.port=2123
# 数据目录
Jpom 中数据目录是指存储数据的文件,一般会存储一些程序相关文件,运行中产生的临时文件。
- 服务端还会存储构建相关文件(构建仓库文件、构建产物文件等)
- 插件端还会存储项目文件备份相关文件
jpom 数据存储路径:
- 如果调试模式运行默认路径为【${user.home}/jpom/】
- 安装运行默认为jar包文件的父级
- 当然用户还可以自定义数据目录,修改数据目录位置请参考:
extConfig.yml
# 服务端数据目录文件夹说明
.
├── data
├────── build => 构建相关文件夹
├──────────── a7edf3cff8d542d3bf5758f9ab9b9a32 => 单个构建存储相关文件夹
├──────────────── history => 需要执行的脚本
├───────────────────── #1 => 单次执行记录相关文件夹
├─────────────────────── info.log => 构建日志
├─────────────────────── result => 构建产物存储文件夹
├──────────────── source => 构建的仓库文件夹
├────── script => 服务端脚本文件夹
├──────────── a7edf3cff8d542d3bf5758f9ab9b9a32 => 脚本对应相关文件夹
├──────────────── script.sh => 需要执行的脚本
├──────────────── log => 执行日志
├──────────── xxxx => 其他脚本信息
├────── 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 文件
├──────────── .......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 => 数据库文件
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 防火墙、安全组
当出现服务都正常,但是无法访问都时候需要检查一下 当前网络环境下和对应都 IP(插件端、服务端) 是否畅通。
如果 IP 都是畅通情况下需要检查一下 服务器是否配置了防火墙规则没有开放对应端口(2122)、或者服务端的服务器中的网络环境是否能访问您配置的插件端 IP 和 端口
注意 linux 系统中防火墙可能存在多种:Firewall、Iptables,再检查防火墙配置时候需要都检查一下
# 在线构建
在线构建是通过 Jpom 自动拉取仓库代码(支持 git、svn 仓库)到服务端本地目录,执行对应到命令(构建命令
)后将仓库目录下面到指定文件或者文件夹(构建产物
)执行发布操作
构建也将产生构建历史,构建历史可以用于回滚、查看对应构建日志或者下载构建产物功能
构建可以搭配 webhook
来实现提交代码后自动触发构建、同时也支持定时(cron
)构建来实现自动触发构建
- 在使用在线构建提示相关命令未找到或者不能执行 (
command not found: xxxx
、xxxx command not found
),请检查服务端所在的服务器中是否存在对应环境 - 构建依赖的是系统环境,如果需要 maven 或者 node 需要服务端所在的服务器中有对应插件,如果已经启动服务端再安装的对应环境需要通过命令行重启服务端后才生效。
- 构建是在服务端执行,依赖的服务端环境和插件端没有直接关联。
- 构建需要占用的服务器资源可能较高,需要根据实际情况提前预留配置对应的 CPU 和内存空间,反则可能出现 OOM 情况
- 构建日志提示:
xxx 不存在、处理构建产物失败
请优先检查构建命令执行结果是否如预期执行结果一致产生对应的文件,再检查构建产物目录填写是否正常,请注意构建产物目录是填写仓库下面的相对路径:如dist
、/target/xxxx.jar
# 产物目录
在添加构建时候需要填写产物目录。
这里产物目录是指:执行构建命令后执行发布操作时发布指定文件或者文件夹到对应位置的目录
这里的目录注意一定是仓库路径下面的相对目录
比如:
- 构建 java 项目成功后会生成 target 目录,一般场景都是需要 target 目录下面的某个文件,那么填写:
/target/xxx.jar
- 如果是多层级目录则需要填写完整路径如果:
/xxxx/target/xxxx.jar
- 构建 vue 项目成功后会生成 dist 目录,那么直接填写
dist
即可
这里可以添加文件夹或者文件,如果填写文件夹则会自动发布整个文件到对应位置,如果填写文件则只发布对应到文件
产物目录目前支持模糊匹配: 支持通配符(AntPathMatcher)
? 匹配一个字符
* 匹配零个或多个字符
** 匹配路径中的零个或多个目录
模糊匹配示例:/target/xxx-1.0.?.jar
、/target/*.jar
注意:目前模糊匹配只会匹配到一个结果,如果匹配到多个结果将取第一个结果
# 非阻塞命令
在 Jpom 中大部分命令都需要使用非阻塞:
- 构建命令
- 构建本地发布命令
- 构建 SSH 发布命令
- SSH 模版命令
- 脚本模版命令
非阻塞命令指执行命令后会自动退出而不是一直阻塞窗口需要按 ctrl+c 才能退出命令窗口、或者需要输入交互都命令
阻塞命令举例:
yum intall xxxxx
, 执行这样的命令需要用户确认输入才能继续执行,这样的命令就不能在 jpom 上述功能相关命令中使用,需要修改为yum install -y xxxxx
java -jar xxx.jar
, 执行这样的命令会阻塞窗口,那么在 linux 中可以使用nohup
来解决,修改为:nohup java -jar xxx.jar >>xxx.log 2>&1 &
npm run serve
,执行这样的命令窗口将一直阻塞,那么需要修改为npm run build
# java、javaw 命令
通常情况都是使用 java 命令来启动 java 项目,如: java -jar xxxx.jar
Jpom 中在 windows 环境来启动 java 项目(包括 Server.bat、Agent.bat) 因为 windows 没有 nohup 命令,使用 javaw 可以实现类似 nohup 效果并且能将控制台日志输出到指定文件
# Jpom 中多种脚本对比
脚本类型 | 存储方式 | 执行方式 | 是否支持批量执行 | 是否支持批量编辑 | 是否支持定时执行 |
---|---|---|---|---|---|
脚本列表 | 服务端 | 在服务端执行 | 否 | 否 | 支持 cron |
ssh 命令脚本 | 服务端 | ssh 远程执行 | 是 | 否 | 支持 cron |
节点脚本 | 节点(插件端) | 在节点执行 | 否 | 是 (使用服务端脚本分发) | 支持 cron |
# Jpom 中的白名单说明
Jpom 中的白名单的由来,由于项目管理都需要对项目的文件进行管理。在创建项目的时候需要确定项目的相关文件存放的路径。 那么此时由用户决定存放到哪里,显得有点冒然(不安全,有点随意)。因为服务器中有些路径已经存放重要配置文件,此时项目路径相同那么必然没有任何安全性
为什么是白名单而不是配置黑名单(禁止名单):假设设置黑名单、如果设置黑名单那么没有办法最快速收集用户不同服务器中重要文件路径,此方法也显得不合适
需要配置白名单的地方有如下:
- 节点项目目录白名单
- 节点 nginx 配置文件白名单
- 节点 ssl 证书目录白名单
- 节点分发白名单(和节点项目白名单类似)
- SSH 授权管理目录白名单
# Jpom 的参数配置
Jpom 中配置文件使用 SpringBoot 加载配置文件机制实现,配置文件中可以配置一些遵循 SpringBoot 的属性
在项目运行的根路径下的extConfig.yml
文件
- 插件端示例:
extConfig.yml
- 服务端示例:
extConfig.yml
# 触发器 (webhook、钩子)
Jpom 中的触发器可以理解为一个接口,执行这个接口会自动帮助您完成一些事情
Jpom 中的触发器可以理解为 webhook(钩子) 实现
目前 Jpom 中支持触发器的功能有如下:
- 执行构建
- 执行 SSH 脚本
- 执行服务端脚本
- 执行节点脚本
使用触发器可以实现在一定场景下实现自动执行的操作
如:提交代码后自动构建、外部系统调用触发器来实现执行 Jpom 系统中的相关脚本
# demo 账号
Jpom 系统中内置了 demo
用户名为演示账号,演示账号存在很多限制,在自己部署后请非必要不要创建 demo
用户
- 01
- 使用 gradle 本地构建打包项目并发布到节点08-08
- 02
- 如何开启 h2-console web 访问功能08-05
- 03
- 在线管理 SSH 终端以及上传文件(SFTP)和执行命令历史08-01