DROOLS/JBPM Workbench是否支持pre-commit钩子?
Drools/JBPM Workbench pre-commit钩子不触发问题解答
核心结论
Drools/JBPM Workbench(含后续更名的KIE Workbench、Business Central)默认提交链路不支持原生pre-commit钩子触发,你的post-commit钩子正常运行、pre-commit无响应是产品机制导致,和脚本编写、权限配置无关。
原因说明
- Workbench内部的资产提交走自研的KIE持久化链路,并非直接调用原生Git CLI的commit流程。整个提交链路仅在资产写入内置Git仓库完成后,预留了post-commit钩子的执行回调点,提交执行前的阶段没有开放pre-commit钩子的执行入口,因此无论怎么调整pre-commit脚本内容,都不会被默认流程触发。
- 你编写的两段脚本语法、结构完全一致,post-commit可正常输出,已经证明钩子目录配置、文件可执行权限都符合要求,不存在配置错误。
可正常生效的post-commit钩子代码:
#!/bin/bash echo "***** Calling post program - $0 for: $PWD"无法触发的pre-commit钩子代码:
#!/bin/bash echo "***** Calling pre program - $0 for: $PWD"
可行替代方案
- 用Workbench原生提交校验实现pre-commit拦截需求:在项目的设置面板中配置资产校验规则,包括规则文件语法校验、流程定义合法性校验、元数据必填校验等,这类校验会在提交动作正式执行前触发,校验不通过直接阻断提交流程,可覆盖绝大多数pre-commit场景的需求。
- 改用远端Git仓库钩子实现拦截:不要直接依赖Workbench内置Git仓库的钩子能力,将内置仓库同步推送到自托管的远端Git服务,在远端配置pre-receive钩子,所有从Workbench推送的提交都会先经过该钩子校验,不满足规则直接打回,拦截效果和本地pre-commit一致。
- 高版本实验性开关尝试:如果你使用的是7.40及以上版本的KIE Workbench,可以在服务启动参数中添加系统属性
-Dorg.uberfire.nio.git.hooks.pre-commit.enabled=true,重启服务后测试pre-commit是否触发。注意该功能为实验性特性,部分版本存在钩子执行后无法阻断异常提交的问题,生产环境谨慎使用。
内容的提问来源于stack exchange,提问作者vscoder
相关产品推荐
相关产品推荐

