如何仅在合并GitLab Merge Request时触发Webhook?
解决GitLab Webhook仅在Merge Request合并时触发Jenkins任务的方案
方法一:GitLab端直接过滤(推荐,从源头减少无效请求)
- 打开GitLab目标项目的「设置」→「Webhooks」页面
- 找到已配置的Jenkins Webhook,确认「Trigger」区域只勾选了「Merge request events」
- 下拉到「Filter」板块,选择「JSON payload」作为过滤类型,输入规则:
object_attributes.action == "merged" - 保存配置后,GitLab只会在Merge Request被合并(action值为
merged)时才发送Webhook请求到Jenkins,其他操作不会触发
方法二:Jenkins端优化过滤(适配低版本GitLab)
如果你的GitLab版本较低没有内置过滤功能,可以在Jenkins端通过Generic Webhook Trigger Plugin做严格限制:
- 配置插件时,先在「Post content parameters」中提取action参数:
- 参数名设为
mr_action,JSON路径填写$.object_attributes.action
- 参数名设为
- 然后在「Trigger conditions」里添加规则:
mr_action equals merged - 勾选「Silent response when no trigger conditions are met」,避免不符合条件的请求生成无效任务记录
如果使用Pipeline脚本,可直接把过滤逻辑写在触发配置中:
pipeline { agent any triggers { GenericTrigger( genericVariables: [ [key: 'mr_action', value: '$.object_attributes.action'] ], causeString: 'Triggered by MR merge', token: 'your_webhook_token', triggerConditions: [ [expression: 'mr_action.equals("merged")', label: 'MR merged'] ] ) } stages { stage('Build') { steps { echo '仅在MR合并时执行构建' } } } }
注意事项
- 配置完成后,测试MR的创建、更新、合并、关闭等操作,验证只有合并动作会触发Jenkins任务
- GitLab的JSON payload过滤功能从13.10版本开始支持,若找不到该选项建议升级GitLab版本
内容的提问来源于stack exchange,提问作者StevieBee
相关产品推荐
相关产品推荐

