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

如何从Microsoft Teams触发Jenkins任务(类似Slack操作方式)

在Microsoft Teams中通过出站Webhook触发Jenkins任务

核心实现逻辑

通过Teams出站Webhook接收聊天内的命令(如build/abort),借助一个中间服务解析命令并调用Jenkins API完成对应操作——因为Teams的请求格式无法直接适配Jenkins API,中间服务负责两者的转换和权限验证。

具体操作步骤

1. 配置Jenkins API访问权限

  • 生成Jenkins API令牌:进入Jenkins个人中心→设置→API令牌,创建并保存令牌(后续调用API需要用)。
  • 分配任务权限:在目标Jenkins任务的配置页面,通过权限矩阵给生成令牌的用户分配构建和终止构建的权限。

2. 创建Teams出站Webhook

  • 打开目标Teams频道,点击右上角三个点→「连接到频道」,搜索「出站Webhook」并创建。
  • 填写Webhook名称、上传图标,输入中间服务的公网接收地址,完成创建后保存系统生成的安全令牌(用于验证Teams请求的合法性)。

3. 开发中间服务(以Python Flask为例)

服务需完成三个核心动作:验证Teams请求、解析命令、调用Jenkins API。示例代码如下:

from flask import Flask, request, jsonify
import requests
from requests.auth import HTTPBasicAuth

app = Flask(__name__)

# 配置参数,替换为自己的实际信息
TEAMS_SECRET = "你的Teams出站Webhook安全令牌"
JENKINS_URL = "你的Jenkins服务器地址"
JENKINS_USER = "Jenkins用户名"
JENKINS_TOKEN = "Jenkins API令牌"
TARGET_JOB = "要操作的Jenkins任务名称"

# 验证Teams请求合法性(生产环境请严格按微软文档实现签名验证)
def check_teams_auth(request):
    incoming_token = request.headers.get("Authorization", "").split(" ")[-1]
    return incoming_token == TEAMS_SECRET

# 触发Jenkins构建
def start_jenkins_build():
    build_url = f"{JENKINS_URL}/job/{TARGET_JOB}/build"
    resp = requests.post(build_url, auth=HTTPBasicAuth(JENKINS_USER, JENKINS_TOKEN))
    return resp.status_code == 201

# 终止Jenkins最新构建
def stop_jenkins_build():
    # 获取最新构建号
    build_info_url = f"{JENKINS_URL}/job/{TARGET_JOB}/lastBuild/api/json"
    build_data = requests.get(build_info_url, auth=HTTPBasicAuth(JENKINS_USER, JENKINS_TOKEN)).json()
    latest_build_num = build_data["number"]
    # 发送终止请求
    abort_url = f"{JENKINS_URL}/job/{TARGET_JOB}/{latest_build_num}/stop"
    resp = requests.post(abort_url, auth=HTTPBasicAuth(JENKINS_USER, JENKINS_TOKEN))
    return resp.status_code == 200

@app.route("/teams-jenkins-hook", methods=["POST"])
def handle_teams_command():
    if not check_teams_auth(request):
        return jsonify({"text": "权限验证失败"}), 403
    
    payload = request.json
    command = payload["text"].strip().lower()
    
    if command == "build":
        success = start_jenkins_build()
        reply_msg = "构建任务已启动" if success else "启动构建失败,请检查Jenkins配置"
    elif command == "abort":
        success = stop_jenkins_build()
        reply_msg = "最新构建已终止" if success else "终止构建失败,请确认任务状态"
    else:
        reply_msg = "未知命令,支持的命令:build(启动构建)、abort(终止最新构建)"
    
    # 返回Teams可识别的消息格式
    return jsonify({
        "type": "message",
        "text": reply_msg
    })

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

4. 部署中间服务

  • 将服务部署到公网可访问的服务器(如云服务器、Heroku等),确保端口对外开放。
  • 测试服务:用Postman模拟Teams请求发送build或abort命令,验证是否能正确调用Jenkins API。

5. 在Teams中测试命令

  • 在配置了出站Webhook的频道中,输入@你的Webhook名称 build或@你的Webhook名称 abort,即可触发对应Jenkins操作,服务会返回执行结果。

注意事项

  • 生产环境必须严格实现Teams请求的签名验证,避免非法请求调用Jenkins。
  • 可扩展命令逻辑,比如支持指定任务名称、传递构建参数,只需修改中间服务的命令解析和API调用部分。
  • 若Jenkins在内网,需确保中间服务能通过反向代理或VPN访问Jenkins服务器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 21:22:53