You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅在合并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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 22:35:35