如何在Bamboo构建完成后通过Python脚本推送构建详情至MS Teams
在Bamboo中传递构建详情到Python脚本的实现方案
核心思路
Bamboo内置了大量预定义的构建变量,你可以通过命令行参数或环境变量两种方式,将这些构建详情直接传递给Python脚本,无需额外的配置或接口调用。
方式一:命令行参数传递
在Bamboo任务中直接将所需的构建变量作为参数传给脚本,脚本通过sys.argv接收。
1. 配置Bamboo任务
- 进入目标Bamboo计划的构建流程编辑页面,在末尾添加一个Script任务
- 任务类型选择「Command」或「Python」(需提前配置Python环境)
- 在命令框中写入执行命令,将需要的构建变量作为参数传入:
python /path/to/your_script.py ${bamboo.buildResultKey} ${bamboo.buildState} ${bamboo.buildNumber} ${bamboo.buildUrl}
2. Python脚本接收参数
import sys # 按顺序接收命令行参数 build_result_key = sys.argv[1] build_state = sys.argv[2] build_number = sys.argv[3] build_url = sys.argv[4] # 后续处理逻辑(比如组装Teams消息、调用Webhook)
方式二:环境变量读取(推荐)
Bamboo会自动将所有内置构建变量暴露为系统环境变量(变量名转为大写,点号替换为下划线),脚本通过os.environ直接读取,无需在命令行中手动传递参数。
1. 配置Bamboo任务
- 同样添加Script任务,命令只需指定脚本路径即可:
python /path/to/your_script.py
2. Python脚本读取环境变量
import os # 读取Bamboo自动注入的环境变量 build_state = os.environ.get('BAMBOO_BUILDSTATE') build_number = os.environ.get('BAMBOO_BUILDNUMBER') plan_name = os.environ.get('BAMBOO_PLANNAME') build_url = os.environ.get('BAMBOO_BUILDURL') error_msg = os.environ.get('BAMBOO_BUILDERRORMESSAGE', '无错误信息') branch_name = os.environ.get('BAMBOO_REPOSITORY_BRANCH_NAME')
常用Bamboo构建变量参考
根据需求选择需要的变量:
${bamboo.buildState}:构建状态(SUCCESS/FAILED/INPROGRESS等)${bamboo.buildUrl}:构建详情页面的直接链接${bamboo.buildDuration}:构建耗时(毫秒)${bamboo.planName}:计划名称${bamboo.repository.branch.name}:触发构建的分支名称${bamboo.buildErrorMessage}:构建失败时的错误信息
示例:推送结果到MS Teams
结合上述方法,完整的推送脚本示例:
import os import requests # 读取构建详情 build_state = os.environ.get('BAMBOO_BUILDSTATE') build_number = os.environ.get('BAMBOO_BUILDNUMBER') plan_name = os.environ.get('BAMBOO_PLANNAME') build_url = os.environ.get('BAMBOO_BUILDURL') error_msg = os.environ.get('BAMBOO_BUILDERRORMESSAGE', '无') # 组装Teams消息卡片 message_card = { "@type": "MessageCard", "@context": "http://schema.org/extensions", "themeColor": "0076D7" if build_state == "SUCCESS" else "FF0000", "summary": f"{plan_name} 构建 #{build_number} {build_state}", "sections": [ { "activityTitle": f"**{plan_name} 构建 #{build_number} {build_state}**", "facts": [ {"name": "构建状态", "value": build_state}, {"name": "构建编号", "value": build_number}, {"name": "查看详情", "value": f"[点击跳转]({build_url})"}, {"name": "错误信息", "value": error_msg if build_state != "SUCCESS" else "无"} ], "markdown": True } ] } # 发送到Teams Webhook teams_webhook = "你的MS Teams频道Webhook地址" response = requests.post(teams_webhook, json=message_card) response.raise_for_status()
内容的提问来源于stack exchange,提问作者CS1999
相关产品推荐
相关产品推荐

