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

如何配置避免Jenkins在GitLab合并请求获批时触发任务?

解决Jenkins过滤GitLab合并请求获批触发的问题

核心原因

GitLab社区版的Merge request events webhook会包含获批动作,即使你在Jenkins任务中未勾选EE专属的Approved Merge Requests,插件仍可能收到该事件并触发构建,需要手动通过条件判断过滤。

具体解决方案

1. Pipeline任务方案

直接在Pipeline中添加触发条件判断,过滤approved动作:

pipeline {
    agent any
    triggers {
        gitlab(
            triggerOnMergeRequest: true,
            triggerOpenMergeRequestOnPush: 'source',
            openMergeRequestEvents: ['opened', 'updated', 'reopened'] // 明确只监听需要的事件
        )
    }
    when {
        expression {
            // 解析GitLab发送的webhook payload
            def mrPayload = readJSON text: params.gitlabPayload
            // 排除获批动作的触发
            return mrPayload.object_attributes.action != 'approved'
        }
    }
    stages {
        stage('Build') {
            steps {
                // 你的构建步骤
                echo 'Running build...'
            }
        }
    }
}

如果你的Jenkins GitLab插件版本已暴露gitlabMergeRequestAction环境变量,可简化判断:

when {
    not {
        equals expected: 'approved', actual: env.gitlabMergeRequestAction
    }
}

2. 自由风格任务方案

通过Conditional BuildStep插件实现前置判断:

  • 先安装Conditional BuildStep插件
  • 在任务中添加「Execute shell」步骤(需Jenkins服务器安装jq工具),作为构建前置条件:
# 解析webhook payload中的动作类型
MR_ACTION=$(echo "$gitlabPayload" | jq -r '.object_attributes.action')
# 如果是获批动作,终止构建
if [ "$MR_ACTION" = "approved" ]; then
    echo "Merge request approved, aborting build..."
    exit 1
fi
  • 配置该步骤为「只有当条件满足时才执行」(实际是反向判断,若为approved则退出,阻止后续步骤执行)

额外检查

  • 确认GitLab webhook仅勾选Merge request events,无需额外勾选其他事件
  • 检查Jenkins GitLab插件版本,尽量使用最新稳定版,避免旧版本的事件过滤bug

内容的提问来源于stack exchange,提问作者Nicolas Baumann

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 12:05:02