Merge事件无法触发Jenkins构建

本文详细记录了在Jenkins2.263.1版本中,使用GenericWebhookTriggerPlugin作为触发器与Gitlab集成时遇到的问题。当Gitlab的Merge事件无法触发Jenkins自动构建时,作者通过分析Gitlab webhook日志和事件body,发现Merge事件缺少ref属性。解决方案是使用object_attributes.target_branch替代,并调整regexpFilterText和regexpFilterExpression以适应多个触发条件。通过这种方式提高了触发任务的容错性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目场景:

Jenkins 版本:Jenkins 2.263.1
触发器:Generic Webhook Trigger Plugin(问题就出在这里)
SCM:Gitlab

问题描述:

Gitlab 的 Merge 事件无法触发 Jenkins 的自动构建。

triggers {
        GenericTrigger(
            genericVariables: [
                [key: 'ref', value: '$.ref', regexpFilter:'refs/heads/'], // 此处导致了问题
                [key: 'action', value: '$.object_kind'],
            ],
            causeString: 'Triggered on $ref',
            token: 'test',
            printContributedVariables: true,
            printPostContent: true,
            silentResponse: false, // 静默响应,只返回状态码
            regexpFilterText: '$ref',
            regexpFilterExpression: '^(master|((dev(2|3|4|5)|release|hotfix)/.*))$'
        )
    }

原因分析:

不得不吐槽一下 Jenkins,调试 pipeline 只能通过不停地提交代码来验证。调都调不了,***我都烦死了。

在调试过程中发现 Push 事件能正常触发构建,但是 Merge 始终不行,开始定位问题。

  1. 确认 Webhook 是否触发。
    查看 Gitlab 的 Webhook 的请求日志。可以在 Gitlab 项目仓库中 Setting => Integrations => 进入定义的 Webhook 详情 => Recent Deliveries 查看。发现相关的 Merge 事件的确向 Jenkins 发送了请求。
  2. 检查 post body 是否满足触发条件。
    对比 Push 事件和 Merge 事件的 body,发现 Merge 事件的 body 中缺少了 ref 属性。而 Jenkinsfile 中就是提取该字段来过滤触发事件的,由此定位问题所在。

    由此反省出一个道理,问题很可能出现在你觉得不可能出现的地方。


解决方案:

提取触发任务的 branch 时不能单纯地从 ref 属性提取,由于 Merge 事件的 branch 保存在 object_attributes.target_branch 中,可以多使用一个变量,将其保存,提高容错性。

triggers {
        GenericTrigger(
            genericVariables: [
                [key: 'ref', value: '$.ref', regexpFilter:'refs/heads/', defaultValue: 'null'],
                [key: 'target_branch', value: '$.object_attributes.target_branch', defaultValue: 'null'],
                [key: 'action', value: '$.object_kind'],
            ],
            token: 'test',
            printContributedVariables: true,
            printPostContent: true,
            silentResponse: false, // 静默响应,只返回状态码
            // 对多个变量进行过滤,我用端横线‘-’连接起来
            regexpFilterText: '$ref-$target_branch',
            // 由于上面为二者添加了默认值'null',所以此处使用'null'进行匹配
            regexpFilterExpression: '(^(master|((dev(2|3|4|5)|release|hotfix)/.*))-null$)|(^null-(master|((dev(2|3|4|5)|release|hotfix)/.*))$)'
        )
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值