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

如何在Jenkins多分支流水线中实现Microsoft Teams用户@提及通知

解决Jenkins Office365 Connector插件在Teams中有效提及用户的问题

我之前也碰到过这个问题!Teams里的@提及可不是随便打个@就行的,它需要遵循特定的格式才能触发通知,咱们来一步步解决:

为什么你的@不生效?

Teams的消息系统不会识别纯文本的@${user},它需要明确的用户标识(比如用户主体名称UPN或者Teams用户ID)配合特定的语法,才能定位到用户并推送通知。

方法一:用插件内置的mentions参数(最简单)

Office365 Connector插件其实自带了提及功能,你不需要在message里手动写@,而是单独配置mentions参数。关键是要传入用户的**UPN(比如user@yourdomain.com)**或者Teams用户ID,而不是单纯的用户名。

示例代码:

office365ConnectorSend(
    message: "Started ${env.JOB_NAME} ${env.BUILD_NUMBER} committed by [View on Jenkins](${env.BUILD_URL})",
    webhookUrl: url,
    mentions: [
        [
            id: "user@yourdomain.com", // 替换成用户的UPN或Teams用户ID
            mentionType: "person",
            text: "@${user}" // 消息中显示的提及文本
        ]
    ]
)

注意事项:

  • UPN是最可靠的标识(通常是用户的邮箱),可以从Azure AD或用户的Teams个人资料里找到(更多选项>查看组织资料>用户主体名称)。
  • 如果你的Jenkins里${user}是用户名而不是UPN,可能需要做一个映射(比如用字典把用户名转换成对应的UPN)。

方法二:构造自适应卡片(更灵活)

如果需要更复杂的消息排版,可以直接构造Teams自适应卡片,在卡片里嵌入提及元素。这种方式能实现更多自定义样式,同时保证提及生效。

示例代码:

// 构造提及对象
def userMention = [
    type: "Mention",
    text: "<at>${user}</at>",
    mentioned: [
        id: "user@yourdomain.com", // 用户的UPN或Teams用户ID
        name: "${user}"
    ]
]

// 构造自适应卡片
def adaptiveCard = [
    type: "AdaptiveCard",
    version: "1.0",
    body: [
        [
            type: "TextBlock",
            text: "Started ${env.JOB_NAME} ${env.BUILD_NUMBER} committed by ${userMention.text} [View on Jenkins](${env.BUILD_URL})",
            wrap: true
        ]
    ],
    msteams: [
        entities: [userMention]
    ]
]

// 发送卡片
office365ConnectorSend(
    webhookUrl: url,
    body: new groovy.json.JsonBuilder(adaptiveCard).toString(),
    contentType: "application/json"
)

这个方法里,我们把提及对象加入到msteams.entities数组中,同时在文本里用<at>标签包裹用户名,Teams就能正确识别并触发用户的通知提醒了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:23:04