Ruby无法调用Shippable webhook端点

时间:2017-10-16 19:32:08

标签: ruby httprequest shippable-ci

有一段时间我无法从我的GitLab实例运行webhooks。起初我以为它是与GitLab升级〜10.0版本相关的东西,或者是一些iptables,但是现在我认为它可能更像Ruby的东西以及如何调用Shippable端点(在Ruby中?)。

在失败的请求网站上,我可以看到以下信息:

  • 失败的原因是execution expired
  • 网址为https://[username:password]@api.shippable.com/projects/[project id]/newBuild - 由Shippable在启用项目时自动生成
  • X-Gitlab - 事件类型为Push Hook
  • 还有带请求正文的JSON

首先,我测试了枯萎,我实际上可以从服务器连接Shippable

curl --verbose -X POST -H "Content-Type: application/json" -H "X-Gitlab-Event: $event" --data "$json" $url

请求成功,这让我认为这不是iptables的问题(但是我检查了没有,没有设置iptables规则)。

然后我尝试在/opt/gitlab/embedded/bin/irb

中重新创建该请求
require 'net/http'
require 'net/https'

uri = URI.parse(url)
username = uri.userinfo.split(':')[0]
password = uri.userinfo.split(':')[1]

req = Net::HTTP::Post.new(uri.path, {'Content-Type' =>'application/json', 'X-Gitlab-Event' => event})
req.basic_auth username, password
req.body = json
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

response = http.start { |http| http.request(req) }

然后就像在GitLab中一样失败了:

Net::OpenTimeout: execution expired
    from /opt/gitlab/embedded/lib/ruby/2.3.0/net/http.rb:880:in `initialize'
    from /opt/gitlab/embedded/lib/ruby/2.3.0/net/http.rb:880:in `open'
    from /opt/gitlab/embedded/lib/ruby/2.3.0/net/http.rb:880:in `block in connect'
    from /opt/gitlab/embedded/lib/ruby/2.3.0/timeout.rb:101:in `timeout'
    from /opt/gitlab/embedded/lib/ruby/2.3.0/net/http.rb:878:in `connect'
    from /opt/gitlab/embedded/lib/ruby/2.3.0/net/http.rb:863:in `do_start'
    from /opt/gitlab/embedded/lib/ruby/2.3.0/net/http.rb:852:in `start'
    from (irb):142
    from embedded/bin/irb:11:in `<main>'

有趣的是,在我的本地机器上发生了类似的事情:当Ruby抛出时卷曲成功。

此外,我检查了它不应该是基本身份验证,SSL或POST的问题 - 我从我的服务器的irb成功发布了Bitbucket上的代码片段,就像我测试Shippable webhook端点一样。我甚至在我的模拟服务器上发布了Shippable请求,其请求格式几乎相同。

此时我很好奇这种行为可能是什么原因以及如何进一步调试它。我发现在所有失败案例中只有两个因素是目标(Shippable URI)和客户端(Ruby的Net :: HTTP)。你还建议我检查一下吗?

1 个答案:

答案 0 :(得分:0)

我确实无法回答,但问题消失了 - 我认为GitLab或Shippable更新改变了一些东西,因为钩子开始工作而没有我做任何动作。