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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 14:32:12