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

如何配置使BitBucket推送仅触发指定Jenkins多分支流水线?

问题描述

背景

我们使用Jenkins 2.361.3服务器与本地Bitbucket服务器,通过Push事件的Webhook触发Jenkins上的多分支流水线任务(声明式Jenkinsfile模式),单任务时分支触发正常。

需求

需为同一Bitbucket仓库创建第二个「夜间」多分支流水线任务,仅每日固定时间触发所有分支构建,不响应仓库推送事件。

已执行操作

  • 创建第二个任务,在Jenkinsfile中配置cron触发器,并禁用「Build when a change is pushed to BitBucket」选项;初始任务仍启用该选项。

预期效果

  • 仓库推送时仅触发初始任务,夜间任务不执行;
  • 到达cron时间时触发夜间任务。

实际情况

  • 仓库推送时两个任务均被触发(Jenkins重启后仍如此);
  • cron触发器工作正常。

已做实验

  • 禁用两个任务的「Build when a change is pushed to BitBucket」选项并重启Jenkins,推送仍触发两个任务;
  • 移除Bitbucket的Webhook,为两个任务配置SCM轮询,此方法有效但性能不佳。

推测BitBucket plugin (v223)与Multibranch Pipeline plugin (v716)未遵循该选项设置。

解决方案

1. 给初始任务配置专属Webhook触发URL

修改Bitbucket仓库的Webhook配置,让推送事件仅触发初始任务:

  • 打开Jenkins初始多分支任务的配置页,找到「触发远程构建」选项,设置一个专属认证令牌(比如INIT_BUILD_TOKEN);
  • 构造初始任务的专属触发URL:http://<你的Jenkins地址>/job/<初始任务名称>/build?token=INIT_BUILD_TOKEN;
  • 在Bitbucket仓库的Webhook设置里,把原有的通用Jenkins hook URL替换成这个专属URL,这样推送事件只会触发初始任务。

2. 在夜间任务的Jenkinsfile里加触发判断逻辑

在夜间任务的流水线代码中,添加判断,只有定时触发的构建才继续执行,其他触发来源直接终止:

pipeline {
    agent any
    triggers {
        cron('0 0 * * *') // 每日凌晨触发的定时规则
    }
    stages {
        stage('触发校验') {
            steps {
                script {
                    // 检查构建是否由定时任务触发
                    def isTimerTrigger = currentBuild.buildCauses.any { cause ->
                        cause.shortDescription.contains('Started by timer')
                    }
                    if (!isTimerTrigger) {
                        error('仅定时任务可触发此构建,终止执行')
                    }
                }
            }
        }
        // 后续业务构建阶段...
    }
}

3. 升级相关插件

既然怀疑是插件版本的问题,可以尝试把BitBucket插件和Multibranch Pipeline插件升级到最新稳定版,升级前记得做好Jenkins数据备份,避免影响现有任务运行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 00:55:29