如何在Bamboo服务器实现构建启动时发送通知及获取自定义通知事件?
在Bamboo中实现构建启动时发送通知的方案
好问题!我之前帮不少团队解决过Bamboo里自定义通知事件的需求,刚好能给你分享几个可行的路子,实现构建启动时就触发通知,而不是只等构建完成。
方法一:开发自定义Bamboo插件(最可靠)
Bamboo原生的通知事件确实没有「构建启动」这个选项,所以最稳妥的方式是基于Atlassian SDK开发一个自定义插件,监听构建启动的核心事件。
核心步骤:
- 搭建Atlassian SDK开发环境,创建一个新的Bamboo插件项目
- 实现一个事件监听器,监听Bamboo内部的
com.atlassian.bamboo.event.BuildStartedEvent事件 - 在监听器里编写通知逻辑——可以是发送邮件、调用Slack/Teams的webhook,或者推送内部系统的消息
简单代码示例:
import com.atlassian.bamboo.event.BuildStartedEvent; import com.atlassian.event.api.EventListener; import com.atlassian.plugin.spring.scanner.annotation.component.Scanned; import com.atlassian.plugin.spring.scanner.annotation.imports.ComponentImport; import com.atlassian.mail.server.MailServerManager; @Scanned public class BuildStartNotificationListener { private final MailServerManager mailServerManager; public BuildStartNotificationListener(@ComponentImport MailServerManager mailServerManager) { this.mailServerManager = mailServerManager; } @EventListener public void onBuildStarted(BuildStartedEvent event) { String planKey = event.getPlanResultKey().getPlanKey().toString(); String buildNumber = event.getPlanResultKey().getBuildNumber().toString(); String buildUrl = event.getPlanResultKey().getBuildResultUrl(); // 这里可以替换成你需要的通知逻辑,比如发送邮件或调用webhook String subject = String.format("Bamboo构建已启动:%s #%s", planKey, buildNumber); String body = String.format("构建详情:%s", buildUrl); // 调用Bamboo邮件服务发送通知 mailServerManager.getDefaultSMTPMailServer().send("your-team@example.com", subject, body); } }
这个方法的优势是覆盖所有构建启动场景——哪怕代码拉取失败,只要构建触发了,事件就会被监听并发送通知,比任务级的方案更可靠。
方法二:利用构建计划的前置任务(无需开发)
如果不想折腾插件开发,也可以用Bamboo的原生任务功能,在构建计划的第一个位置添加一个自定义任务,专门用来发送启动通知。
具体操作:
- 打开目标构建计划的「配置」页面,进入「任务」标签
- 添加一个脚本任务(Shell/PowerShell/Python都可以)
- 在脚本里编写通知逻辑,比如用
curl调用Slack的webhook:
curl -X POST -H 'Content-type: application/json' --data '{ "text":"Bamboo构建已启动:${bamboo.planKey} #${bamboo.buildNumber}\n详情链接:${bamboo.buildResultsUrl}" }' https://hooks.slack.com/services/XXX/XXX/XXX
- 把这个任务设置为构建计划的第一个任务,并确保它的执行条件是「总是执行」(这里它是第一个任务,主要是确保构建启动就触发执行)
这个方法的好处是快速实现,无需开发成本,但有个小局限:如果构建在任务执行前就失败了(比如代码仓库拉取权限不足、网络问题),这个通知就发不出去。如果你的场景对这种极端情况不敏感,这个方案完全够用。
方法三:借助Bamboo的Webhook扩展(部分场景适用)
如果你的团队已经在用第三方集成工具,有些工具可以通过Bamboo的REST API监听构建状态变化,或者你可以结合Bamboo的Webhook功能。不过这个方法的灵活性不如前两个,而且很多时候还是需要配合插件来触发「构建启动」的webhook事件,所以优先级不如前两个方案。
内容的提问来源于stack exchange,提问作者Vinicius Deschamps
相关产品推荐
相关产品推荐

