如何配置使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
相关产品推荐
相关产品推荐

