sublime text可通过自定义build_system调用curl触发jenkins构建,但必须先获取crumb并携带jenkins-crumb请求头,同时使用api token认证、正确url编码job名,并确保jenkins端启用远程触发且csrf保护配置合规。

Sublime Text 本身不支持直接调用 Jenkins API 触发构建,但可以通过自定义 build_system 调用 curl 发送 POST 请求实现“一键触发”,关键在于权限、CSRF 保护和参数构造是否正确。
如何用 Sublime 的 Build System 调用 Jenkins REST API
Sublime 的 sublime-build 文件本质是 JSON,它能执行 shell 命令,所以核心是写一条带认证的 curl 命令。Jenkins 默认开启 CSRF 保护(crumb),直接 POST 会返回 403 No valid crumb was included in the request 错误。
- 必须先 GET
/crumbIssuer/api/json获取 crumb(需 Basic Auth) - 再用该 crumb + 用户凭据 POST 到
/job/{jobName}/build - 推荐使用 Jenkins API Token 而非明文密码,避免泄露风险
- Windows 用户注意:PowerShell 对引号和转义更敏感,建议用 Git Bash 或 WSL 中的
curl
示例 sublime-build 内容(保存为 Jenkins Build.sublime-build):
{
"shell_cmd": "curl -u 'admin:your_api_token' -X POST 'http://jenkins.example.com/crumbIssuer/api/json' | jq -r '.crumb' | xargs -I {} curl -u 'admin:your_api_token' -H 'Jenkins-Crumb: {}' -X POST 'http://jenkins.example.com/job/webDemo/build'",
"variants": [
{
"name": "With Parameters",
"shell_cmd": "curl -u 'admin:your_api_token' -X POST 'http://jenkins.example.com/crumbIssuer/api/json' | jq -r '.crumb' | xargs -I {} curl -u 'admin:your_api_token' -H 'Jenkins-Crumb: {}' -X POST --data 'token=your_build_token¶m1=value1' 'http://jenkins.example.com/job/webDemo/buildWithParameters'"
}
]
}
注意:jq 是必需依赖,若未安装请改用 sed 或 Python 解析 JSON;your_api_token 需在 Jenkins 用户配置页生成,不是登录密码。
Jenkins 端必须开放的配置项
默认 Jenkins 安全策略会拦截远程 API 请求,以下三项不配齐,curl 必然失败:
-
CSRF Protection不能关闭,但必须通过crumb头传递校验值(如上所示) -
Global Security → Access Control → Anonymous Read access若勾选,可省去认证,但极不推荐 -
Build Triggers → Trigger builds remotely (e.g., from scripts)必须启用,并设置Authentication Token(用于buildWithParameters场景)
如果 Jenkins 启用了代理或反向代理(如 Nginx),还需确认 X-Forwarded-Proto 和 X-Forwarded-Host 头被正确透传,否则 crumb 校验可能因协议/域名不匹配而失败。
为什么 build_system 里不能直接用 Jenkins Pipeline 参数化构建
Sublime 的 build_system 是单次命令执行器,无法交互式输入参数,也不支持异步等待构建结果。所以所谓“带参构建”,只能靠硬编码或外部脚本注入,例如:
- 把
param1值写死在shell_cmd里(适合固定场景) - 用 Python 脚本读取当前文件名或项目目录名,动态拼接参数(需确保 Python 环境可用)
- 配合 Sublime 插件如
InputHelper弹窗输入参数,再调用curl—— 这已超出原生 build system 能力,需额外扩展
真正需要灵活参数的场景,建议退一步:在 Sublime 中快捷键触发终端,手动运行封装好的 shell 脚本,而非强塞进 sublime-build。
容易被忽略的权限与路径细节
很多人卡在“请求发出去了但没反应”,其实问题常出在边界位置:
- Jenkins job 名含空格或特殊字符(如
my project)时,URL 中必须 URL encode,my%20project才有效 - API Token 在 Jenkins 用户页面生成后,需立即复制——刷新页面后不可见
- Sublime 的
shell_cmd在 Windows 下默认走 cmd.exe,不识别单引号,应改用双引号并转义内部引号 - 若 Jenkins 启用了 HTTPS 且证书自签,
curl需加-k参数,但生产环境严禁这么做
最稳妥的做法是:先在终端里完整跑通 curl 命令,再逐字复制进 sublime-build,别试图在 Sublime 里调试网络请求逻辑。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











