新手问题 ruby 使用 rest-client 一直无法成功,求助各位大佬!

hopenofool · 2019年05月22日 · 最后由 hopenofool 回复于 2019年05月24日 · 2043 次阅读

我在控制台发送 curl 命令如下

curl -v http://124.205.41.149:8080/jenkins/job/pinpoint_single_machine_scan/build -F file0=@@/home/git/gitlab/public/uploads/topinpoint.zip -F json='{"parameter": [{"name":"PP_PRECISION","value": "normal"},{"name": "PP_JAVA_MODE", "value": "jar"},{"name": "PP_PROJECT_NAME", "value": "thirdpipeline1"},{"name":"upload/project.zip", "file":"file0"}]}' --user admin:1243758e195b1073e663144699134375d9

我想在 ruby 代码中实现,最终采用了 rest-client,我的代码如下,试了很多次,主要是下面两种,参数一直在调

1.

response = RestClient::Request.execute(
      :method => :post,
      :url => 'http://124.205.41.149:8080/jenkins/job/pinpoint_single_machine_scan/build',
      :user => 'admin',
      :password => '1243758e195b1073e663144699134375d9',
      :payload => {
        :multipart => true,
        :file => File.new("#{Rails.root}/public/uploads/topinpoint.zip", 'rb'),
        :parameter => [
          {"name" => "PP_PRECISION"," value" => "normal"},
          {"name" => "PP_JAVA_MODE", "value" => "jar"},
          {"name" => "PP_PROJECT_NAME", "value" => "thirdpipeline1"},
          {"name" => "upload/project.zip", "file" => "file0"}
        ]
      }
    )

2.

RestClient.post('http://124.205.41.149:8080/jenkins/job/pinpoint_single_machine_scan/build',
    {
      :user => 'admin',
      :password => '1243758e195b1073e663144699134375d9',
      :parameter => [
        {"name" => "PP_PRECISION"," value" => "normal"},
        {"name" => "PP_JAVA_MODE", "value" => "jar"},
        {"name" => "PP_PROJECT_NAME", "value" => "thirdpipeline1"},
        {"name" => "upload/project.zip", "file" => "file0"}
      ],
      :upload => {
        :file => File.new("#{Rails.root}/public/uploads/topinpoint.zip", 'rb')
      }
    })

感觉是自己写法有问题,因为我的curl中既有附件,还有参数数组,求解,折腾了好久,特来请教,先谢谢大家了🙏

jenkins 应该有 sdk 吧。。

对 pynix 回复

安装这个似乎需要 ruby 版本 2.2 以上,我们项目版本是 2.1.7😭

ERROR:  Error installing jenkins_api_client:
    mixlib-shellout requires Ruby version >= 2.2.
对 hopenofool 回复

升级吧,2.1 早就停止支持了。。

对 heroyct 回复

大佬,好像不行,首先复制之后参数没了,关键是这个是转 net:http 的,net/http 似乎不支持文件的上传。。

对 pynix 回复

暂时不会升级,只能用 rest-client 来改了,试了好几天了,试不出来😭

楼主不会真的贴了密码出来吧?赶紧改密码。

对 Rei 回复

ip 地址不是真的,已经换过了。

我这种带文件,又有数组参数,请求的话一直是 400(Bad Request)。

对 hopenofool 回复

那你只能怪自己命苦了,

nethttp 是可以上传文件的,主要你参数有问题,你看文件上传参数修改下试试,用网络图片 url 试试

对 hopenofool 回复

有试过低版本的 gem 包吗?

对 pynix 回复

不消极了,我好好研究下,感谢提供 api。

对 darksky 回复

好的,我看下。

对 martin91 回复

没,我找下,试下。

对 Rei 回复

内网吧。。。

对 darksky 回复

已实现,谢谢大家~

hopenofool 关闭了讨论。 05月24日 16:54
需要 登录 后方可回复, 如果你还没有账号请 注册新账号