MCP 实践-用 AI 对话触发 Jenkins 打包App

背景

每次打包都要打开浏览器、进 Jenkins、找到对应 Job、填参数、点构建......重复了无数次。能不能直接说一句"帮我打个 iOS 包"就完事?

现在AI已经非常通用,今天我用 MCP(Model Context Protocol) 搞了一下。


思路

Jenkins 提供了"触发远程构建"功能,只要一个带 token 的 HTTP POST 请求就能触发打包。而 MCP 让 AI 具备调用自定义工具的能力。两者结合,AI 就能代替我操作 Jenkins。

整个链路:

sh 复制代码
用户对话 → AI 理解意图 → 调用 MCP tool → POST Jenkins API → 触发打包

实现

这里MCP服务用Python实现。

新建了一个 trigger_build MCP 工具,核心逻辑很简单:

python 复制代码
@mcp.tool()
async def trigger_build(
    platform: str,
    parameters: dict[str, str] | None = None,
) -> dict[str, object]:
    """触发 Jenkins 打包构建任务。

    调用前必须向用户确认以下几项:
    1. 平台:iOS(platform="ios")还是安卓(platform="android")
    2. 分支
    3. 环境
    4. 描述:本次构建的备注说明

    iOS 参数(Job: iOS_M1_Package_Job):
        branchName   - 分支,如 develop、release/1.0.0、feature/xxx
        configuration - 环境,可选 Debug / Release / AdHoc
        UPDATENOTE   - 描述

    Android 参数(Job: assemble):
        BRANCH_NAME - 分支,如 master、develop、feature/xxx
        BUILD_TYPE  - 环境,可选 xzdzDebug / xzdzProfile / xzdzRelease
        APP_INFO    - 描述

    Args:
        platform: 必填,平台类型,ios 或 android
        parameters: 可选,构建参数键值对
    """
    try:
        return await trigger_jenkins_build(platform, parameters) # 触发jenkins构建请求
    except httpx.HTTPStatusError as e:
        return {"success": False, "error": f"Jenkins 请求失败: {e.response.status_code} {e.response.text}"}
    except httpx.RequestError as e:
        return {"success": False, "error": f"网络请求异常: {e}"}

敏感信息全部放 .env,不进代码库:

dotenv 复制代码
JENKINS_URL=http://jenkins.xxxxxx.com:8000
JENKINS_USER=xxxxxxx
JENKINS_API_TOKEN=xxxxx
JENKINS_IOS_TOKEN=xxxxx
JENKINS_ANDROID_TOKEN=xxxxx

工具的 docstring 写清楚了 iOS 和 Android 各自的参数名,这样 AI 知道该问什么、传什么:

  • iOSbranchName / configuration(Debug/Release/AdHoc)/ UPDATENOTE
  • AndroidBRANCH_NAME / BUILD_TYPE(xzdzDebug/xzdzProfile/xzdzRelease)/ APP_INFO

启动MCP服务,推荐使用 npx @modelcontextprotocol/inspector调试

inspector为开源调试工具

测试获取tools是否成功,启动调试工具后 将服务链接输入到 URL窗口(TransportType协议一定要写对,我这里用的 StreamableHTTP),点击底部 Connect,会列出我们MCP的所有工具。

添加MCP

将MCP服务配置到自己的AI工具,我这里直接配置到VSCode演示:

创建 .vscode/mcp.json 文件,并配置MCP服务

js 复制代码
{
  "servers": {
    "app-publish-mcp": {
      "type": "http",
      "url": "http://localhost:18901/mcp"
    }
  }
}

效果

在VSCode的AI插件聊天窗口对话:

这个时候,AI会根据你的语义拆分意图,并命中对应的 MCP 工具,如果缺少必要参数,AI也会继续追问,可以看到构建触发成功的回复。

这时候我们打开jenkins看到打包开始。

总结

整个工具代码量极少,但从此以后打包只需要一句话。MCP 的价值不在于"能做多复杂的事",而在于把已有的工具和 AI 对话连起来,消除那些每天重复的操作摩擦。

所以这里思路可以拓展到我们很多工作场景,比如App发布、打包、后台一些重复性的操作等,都可以使用MCP的方式提效。

同样也可以将自己的MCP配置到自己 Claude、Cursor、龙虾、钉钉 等聊天工具中使用。

相关推荐
吴佳浩7 小时前
Memory Provider 实战:Hermes、Mem0、Honcho、Hindsight 为什么都这样设计?
人工智能·agent·ai编程
吴佳浩7 小时前
企业级 Agent Memory 选型指南:如何构建可扩展的 Memory Service?
人工智能·agent·ai编程
浅安的邂逅9 小时前
260918-白帽把 OpenAI 论坛“打穿“了:攻防赛漏洞、账户被 Claude 入侵、模型偷偷掩盖不当行为
人工智能·大模型·ai编程·ai模型·行业动态
mCell10 小时前
用 Knip 清理 AI Coding 留下的冗余代码
前端·ai编程·前端工程化
slacker-kian11 小时前
本地大模型 + 自建 MCP Server + SAP OData:让 LLM 代理 SAP 业务操作
大模型·llm·sap·agent·mcp·odata
杨杨杨大侠13 小时前
RAG 到底是怎么工作的?从用户提问到模型回答的完整链路
spring·openai·ai编程
wangruofeng14 小时前
把AI判断做成「智能if语句」!Jev实测:一次调用3个判断,置信度直接路由
aigc·agent·ai编程
全栈技术负责人14 小时前
让 Agent 动手前先“听懂人话”:意图识别插件的设计与实践
ai·ai编程
桃西西呀14 小时前
别被"秒回"骗了:推理模型背后那只"吞金兽",吃的是你看不见的预算
人工智能·llm·ai编程