如何通过Jenkins REST API触发含stashedFile参数的流水线并上传大文件
用Jenkins REST API触发带stashedFile参数的流水线(支持3-5MB文件)
针对你的需求,直接通过multipart/form-data格式的请求调用Jenkins的buildWithParameters端点即可,无需改用base64File(避免大小限制),具体步骤如下:
1. 处理CSRF保护(若启用)
如果Jenkins开启了CSRF保护,先获取Crumb:
curl -u "你的用户名:密码/API令牌" "https://你的Jenkins地址/crumbIssuer/api/json"
从返回结果里提取crumb和crumbRequestField,后续请求需要带上对应的Header。
2. 触发流水线并上传文件
用curl发起multipart请求,直接上传文件并触发流水线:
curl -u "你的用户名:密码/API令牌" \ -H "Jenkins-Crumb: 刚才获取的Crumb值" \ -F "你的stashedFile参数名=@本地文件路径" \ -F "其他流水线参数名=参数值" \ "https://你的Jenkins地址/job/你的流水线名称/buildWithParameters"
关键说明:
- 把
你的stashedFile参数名替换成流水线里定义的stashedFile类型参数的实际名称,比如流水线参数叫UPLOADED_FILE,这里就写UPLOADED_FILE=@/home/user/test.zip - 这种方式直接上传文件,不受
base64File的100KB限制,只要Jenkins全局配置的文件上传上限大于5MB即可(默认Jenkins允许的上传大小远高于这个值,可在「系统管理」→「全局安全配置」里调整Maximum file size) - 有其他流水线参数的话,用
-F "参数名=值"追加即可
3. 流水线中使用上传的文件
流水线里直接用unstash命令取出文件:
pipeline { agent any parameters { stashedFile(name: 'UPLOADED_FILE', description: '用户上传的文件') } stages { stage('处理文件') { steps { unstash 'UPLOADED_FILE' // 文件会被放到当前工作区,文件名和原文件一致 sh 'ls -l' } } } }
额外提示
- 用API令牌代替密码更安全,可在Jenkins个人设置里生成
- 如果用Python/Node.js等脚本实现,要使用支持
multipart/form-data的请求库(比如Python的requests库的files参数),不要手动编码文件内容
内容的提问来源于stack exchange,提问作者regular
相关产品推荐
相关产品推荐

