背景:
脚本触发远程jenkins上的任务,无法实现jenkins slave模式;
因为构建过程中有文件参数,所以Parameterized Remote Trigger 插件也不适用,尝试了几种方式都无法实现。
最终查到有人通过模拟浏览器数据提交实现相同功能,命令如下:
通过curl提交post请求:
curl -u 'test:test' -XPOST 'http://12.12.13.13:6443/jenkins/job/test-post-triger/build/' \
--form attachedfile=@./123.txt \ #文件参数
--form json='{"parameter": [{"name":"abc", "file":"attachedfile"}]}' #参数化构建过中的参数
只查到这样一条命令,尝试过程中遇到不少问题,好不容易调通了,结果远端jenkins的防火墙把.jar结尾的文件给过滤了,导致触发一直失败。
最终成功,但对“attachedfile”这个关键字不太理解,不太清楚是固定格式还是可以自定义,于是在浏览器里提交构建后抓了一下浏览器提交的data,如下:
文字内容如下:
{"parameter": [{"name": "package", "file": "file0"}, {"name": "hosts", "value": "192.168.1.141:192.168.1.82"}], "statusCode": "303", "redirectTo": ".", "Jenkins-Crumb": ["931f889ad5c5ef028fbb9005f5dbb3b67d293c3fcc1f895113fb25d8431fc8cb", "931f889ad5c5ef028fbb9005f5dbb3b67d293c3fcc1f895113fb25d8431fc8cb"]}
从上面的内容可以看出来,这个“attachedfile”为自定义变量,目的在于把文件内容传递到"parameter"参数结构中。