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 知道该问什么、传什么:

  • iOS :branchName / configuration(Debug/Release/AdHoc)/ UPDATENOTE
  • Android :BRANCH_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、龙虾、钉钉 等聊天工具中使用。

相关推荐
xrlfreedom12 小时前
MCP 面试高频考点:桌面客户端 stdio 连接失败,如何用 Resources、结构化输出与 OpenTelemetry 排查?
resources·opentelemetry·结构化输出·mcp
择势13 小时前
iPhone Duo 适配实践:从几何原理到工程封装
ai编程
时早玖沐13 小时前
给 AstrBot 写一个天气推送插件:12 次提交、6 个坑
python·开源·ai编程
qinglongcn13 小时前
当 Agent “很努力但没用”——伪进展检测
agent·ai编程
灿飞13 小时前
第 3 章 第一个 Mojo 程序与 CLI 全解
ai编程
程序员老刘14 小时前
从短剧App的bug看响应式编程在AI时代的优势
flutter·ai编程·客户端
码哥字节14 小时前
AI 编码工具默认给 Agent 多大权限?三家差在这三处
mcp·claude code·ai编程工具
ServBay14 小时前
API Key 泄露如何在 10 分钟内止血?AI 密钥管理必备
后端·ai编程
ZzT16 小时前
AI 时代吃香的三种人:有想法的懒人、替别人着想的人、不被 AI 带偏的人
人工智能·ai编程