JumpServer 远程应用发布:升级 DBeaver 到最新版本(适配无 dbeaver-cli.exe)
2026/7/22 3:31:17 网站建设 项目流程

JumpServer 的应用市场提供了 DBeaver 社区版的发布包,但版本停留在 22.3.4。本文记录如何将其升级到最新的 DBeaver 版本,并解决新版中dbeaver-cli.exe被移除带来的兼容性问题。


1. JumpServer 远程应用 ZIP 包结构

JumpServer 的远程应用发布依赖一套约定的 ZIP 包格式。上传到应用市场后,JumpServer 服务端根据包内的声明文件,自动完成软件安装连接启动两个阶段。

一个标准的 DBeaver 应用 ZIP 包含以下文件:

dbeaver/ ├── manifest.yml # 元数据:名称、版本、支持的协议 ├── setup.yml # 安装指令:下载源、静默安装参数、目标路径 ├── patch.yml # 补丁安装指令 ├── main.py # 入口点:接收连接参数,启动应用 ├── app.py # 核心逻辑:配置 DBeaver、拼接连接串、启动进程 ├── common.py # 工具库:base64 解码、数据模型、进程管理 ├── icon.png # 应用图标 ├── config/ │ └── drivers.xml # 数据库驱动模板 └── README.md

关键文件是setup.yml(管安装)和app.py(管启动)。


2. 旧版的安装与启动流程

2.1 setup.yml — 自动下载安装

type:exesource:jms:///download/applets/dbeaver-ce-22.3.4-x86_64-setup.exearguments:-/S-/allusersdestination:C:\Program Files\DBeaverprogram:C:\Program Files\DBeaver\dbeaver-cli.exemd5:EDA4440D4E32312DD25C9CE5289A228E

JumpServer 服务端读取此文件后:

  1. 从内部文件服务器(jms://协议)下载dbeaver-ce-22.3.4-x86_64-setup.exe
  2. 在远程应用宿主机上静默执行:dbeaver-ce-22.3.4-x86_64-setup.exe /S /allusers
  3. 校验md5,确认安装到C:\Program Files\DBeaver

2.2 app.py — 连接启动

_default_path=r'C:\Program Files\DBeaver\dbeaver-cli.exe'# ...exec_string='%s -con %s'%(self.path,params)ret=subprocess.Popen(exec_string,startupinfo=startupinfo)

当用户通过 JumpServer 连接数据库时:

  1. JumpServer 将连接信息(主机、端口、账号、密码、数据库名等)序列化为 JSON,base64 编码,作为命令行参数传给main.py
  2. app.py解析参数,拼出 DBeaver CLI 连接串
  3. 执行dbeaver-cli.exe -con "name=...|driver=...|host=...|port=...|user=...|password=...|connect=true"
  4. 轮询 PID 等待用户关闭 DBeaver 后退出会话

3. 升级遇到的问题

3.1 dbeaver-cli.exe 已被移除

DBeaver 25.2.3起,Windows 安装包不再包含dbeaver-cli.exe(GitHub Issue #39488)。这意味着旧版app.py中的_default_path指向的文件不存在,应用无法启动。

3.2 解决方案:dbeaver.exe 直接替代

好消息是dbeaver.exe本身完全支持同样的-con参数,连接串格式没有任何变化:

dbeaver.exe-con"driver=mysql|host=127.0.0.1|port=3306|database=test|user=root|password=xxx|name=test|connect=true"

唯一区别:dbeaver-cli.exe是控制台程序,dbeaver.exe是 GUI 程序,因此启动方式需要调整(去掉CREATE_NEW_CONSOLESW_HIDE)。


4. 实战:制作新版手动安装包

整体思路:将setup.yml改为manual类型,让 JumpServer 跳过自动下载安装,同时修改app.py适配新版 DBeaver。

Step 1:修改 setup.yml

# 修改前type:exesource:jms:///download/applets/dbeaver-ce-22.3.4-x86_64-setup.exearguments:-/S-/allusersdestination:C:\Program Files\DBeaverprogram:C:\Program Files\DBeaver\dbeaver-cli.exemd5:EDA4440D4E32312DD25C9CE5289A228E# 修改后type:manualsource:arguments:[]destination:C:\Program Files\DBeaverprogram:C:\Program Files\DBeaver\dbeaver.exe

type: manual告诉 JumpServer跳过下载和安装步骤,直接使用program路径启动应用。sourceargumentsmd5均可清空。

Step 2:修改 patch.yml

同理,补丁安装也改为 manual:

# 修改前type:msisource:jms:///download/applets/dbeaver-patch-22.3.4-x86_64-setup.msiarguments:-/quietdestination:# 修改后type:manualsource:arguments:[]destination:

Step 3:修改 app.py

两处改动:

① 默认路径

# 修改前_default_path=r'C:\Program Files\DBeaver\dbeaver-cli.exe'# 修改后_default_path=r'C:\Program Files\DBeaver\dbeaver.exe'

② 启动方式

# 修改前 — 控制台程序需要隐藏窗口startupinfo=subprocess.STARTUPINFO()startupinfo.dwFlags=subprocess.CREATE_NEW_CONSOLE|subprocess.STARTF_USESHOWWINDOW startupinfo.wShowWindow=subprocess.SW_HIDE exec_string='%s -con %s'%(self.path,params)ret=subprocess.Popen(exec_string,startupinfo=startupinfo)# 修改后 — GUI 程序不需要这些,直接 Popenexec_string='%s -con %s'%(self.path,params)ret=subprocess.Popen(exec_string)

dbeaver.exe是 GUI 程序,不需要CREATE_NEW_CONSOLE创建控制台窗口,也不需要SW_HIDE隐藏。

Step 4:更新 manifest.yml 版本号(可选)

version:25.2.5# 写你实际安装的版本

Step 5:打包 ZIP

zip-rdbeaver-jumpserver-v25.zip dbeaver/-x"*.DS_Store""__pycache__/*""*.pyc"

Step 6:手动安装 DBeaver + 上传

  1. 在远程应用 Windows 宿主机上,手动安装新版 DBeaverC:\Program Files\DBeaver
  2. 将打包好的 ZIP 上传到 JumpServer 应用市场

5. 潜在风险与验证

5.1 进程存活检测

app.pywait()方法通过tasklist轮询dbeaver.exe的 PID 来判断用户是否关闭了 DBeaver:

defwait(self):wait_pid(self.pid)# 每 5 秒检查一次 PID 是否存活

dbeaver-cli.exe作为控制台程序,会在 GUI 打开期间一直存活。dbeaver.exe是 GUI 程序,通常也是这样,但某些情况下主进程可能启动后立即退出、实际窗口在子进程中。建议先在远程机上验证:

# 启动 DBeaver 并记下 PIDdbeaver.exe-con"driver=mysql|host=127.0.0.1|port=3306|database=test|user=root|password=xxx|name=test|connect=true"# 另开终端检查进程tasklist|findstr dbeaver

如果dbeaver.exe进程在窗口关闭前一直存在,就没问题。如果启动后立即退出,需要调整wait()逻辑(比如用-reuseWorkspace或进程名匹配)。

5.2 workspace 路径兼容性

app.py中写死了workspace6

self.app_work_path=r'C:\Users\%s\AppData\Roaming\DBeaverData'driver_yml_path=os.path.join(self.app_work_path,'workspace6','.metadata','.config')

DBeaver 25.x 的 workspace 目录是workspace6还是更高版本(如workspace7),需要在新版安装后确认:

%APPDATA%\DBeaverData\

如果路径变了,需要修改app.pyinit_driver_config()init_other_config()里的 workspace 路径。

5.3 驱动 XML 兼容性

config/drivers.xml是从 DBeaver 22.3.4 导出的驱动模板。新版 DBeaver 的drivers.xml结构如果发生了变化,_merge_driver_xml()方法可能出问题。如果遇到驱动加载异常,可以从新版 DBeaver 安装目录导出drivers.xml替换config/drivers.xml

5.4 连接参数兼容性

-con参数格式在 22.x 到 25.x 之间基本保持稳定。已验证的参数:

参数说明
name连接名称
driver驱动 ID(mysql, postgresql, oracle 等)
host数据库主机
port端口
database数据库名
user用户名
password密码
save是否保存连接(false表示临时连接)
connect创建后是否立即连接

6. 总结

项目改动
setup.ymltype: exetype: manualprogram改为dbeaver.exe
patch.ymltype: msitype: manual
app.py_default_path改为dbeaver.exe,去掉CREATE_NEW_CONSOLE+SW_HIDE
manifest.ymlversion更新为实际版本号

整个过程核心思路就是:把自动安装改为手动安装,同时dbeaver.exe替代已移除的dbeaver-cli.exe。两者接受的-con参数格式完全一致,改动量很小。

如果 JumpServer 远程应用宿主机上有多个 DBeaver 版本,也可以不用manual模式,而是保持type: exe,把新版安装包上传到 JumpServer 文件服务器并更新sourcemd5,这样就可以继续享受自动安装的便利——只是需要确认新版安装包仍然支持/S /allusers静默参数。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询