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

如何通过Webhook实现Azure Container Registry新镜像推送时向MS Teams频道发通知

报错根因

MS Teams 传入Webhook对请求Payload格式有强制要求,最少需要包含text字段,而Azure Container Registry(ACR)默认触发的Webhook原生Payload不符合Teams的格式规范,因此直接推送会返回Text is missing报错。同时ACR目前暂不支持直接自定义Webhook的Payload结构,必须通过中间转换层处理。

解决方案

你可以通过Azure内置的无服务组件完成Payload转换,无需额外搭建服务,操作步骤如下:

  • 第一步:创建格式转换服务,推荐用Azure Function HTTP触发器,核心逻辑示例(Python):
import azure.functions as func
import json
import requests

def main(req: func.HttpRequest) -> func.HttpResponse:
    # 解析ACR推送的原始事件数据
    acr_event = req.get_json()
    # 按需提取ACR事件字段,可根据需要扩展更多字段
    event_action = acr_event['action']
    image_repo = acr_event['target']['repository']
    image_tag = acr_event['target']['tag']
    operator = acr_event['actor']['name']
    trigger_time = acr_event['timestamp']
    
    # 构造符合Teams要求的Payload
    teams_msg = {
        "text": f"ACR新镜像操作通知:\n操作类型:{event_action}\n镜像仓库:{image_repo}\n镜像标签:{image_tag}\n操作人:{operator}\n触发时间:{trigger_time}"
    }
    
    # 替换为你自己的Teams传入Webhook地址
    teams_webhook = "你的Teams Webhook地址"
    requests.post(teams_webhook, json=teams_msg)
    
    return func.HttpResponse("通知已转发", status_code=200)
  • 第二步:进入ACR控制台,创建新的Webhook,触发事件选择push(新镜像推送事件),Webhook地址填写上一步创建的Azure Function触发地址。
  • 第三步:测试推送任意镜像到ACR,验证Teams频道是否可以正常收到通知。
自定义Payload扩展方式

你可以直接从ACR的原始事件Payload中提取所有需要的字段,添加到Teams的text字段中即可。如果需要更丰富的卡片样式,也可以将Teams Payload替换为自适应卡片结构,把提取到的ACR字段填充到对应卡片组件中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:51:02