arangamani / jenkins_api_client

Ruby Client libraries for communicating with Jenkins Remote Access API
http://github.arangamani.net/jenkins_api_client/
MIT License
416 stars 239 forks source link

Job#get_build_id_from_queue broken with newer Jenkins #277

Open rmoriz opened 6 years ago

rmoriz commented 6 years ago

Scenario

Jenkins Version: 2.89.3

Problem

Queue API is called which is gone. Probably related: https://issues.jenkins-ci.org/browse/JENKINS-22865

Error

D, [2018-03-09T21:16:49.305280 #22278] DEBUG -- : GET /api/json?tree=useCrumbs
D, [2018-03-09T21:16:49.823369 #22278] DEBUG -- : HTTP Code: 200, Response Body: {"_class":"hudson.model.Hudson","useCrumbs":false}
D, [2018-03-09T21:16:49.823435 #22278] DEBUG -- : POST /job/test-project/build
D, [2018-03-09T21:16:50.359289 #22278] DEBUG -- : HTTP Code: 201, Response Body: 
D, [2018-03-09T21:16:50.359325 #22278] DEBUG -- : GET /
I, [2018-03-09T21:16:51.077691 #22278]  INFO -- : Job queued for test-project, will wait up to 10 seconds for build to start...
I, [2018-03-09T21:16:51.077763 #22278]  INFO -- : Obtaining the details of task with ID '1942'
D, [2018-03-09T21:16:51.077837 #22278] DEBUG -- : GET /queue/item/1942/api/json
D, [2018-03-09T21:16:51.605381 #22278] DEBUG -- : HTTP Code: 404, Response Body: <html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>Error 404 Not Found</title>
</head>
<body><h2>HTTP ERROR 404</h2>
<p>Problem accessing /queue/item/1942/api/json. Reason:
<pre>    Not Found</pre></p><hr><a href="http://eclipse.org/jetty">Powered by Jetty:// 9.4.z-SNAPSHOT</a><hr/>

</body>
</html>

E, [2018-03-09T21:16:51.605431 #22278] ERROR -- : JenkinsApi::Exceptions::NotFound: Requested component is not found on the Jenkins CI server.
build_number: 
W, [2018-03-09T21:16:51.605511 #22278]  WARN -- : Problem while waiting for 'test-project' build to start.  JenkinsApi::Exceptions::NotFound Requested component is not found on the Jenkins CI server.
Traceback (most recent call last):
    11: from test.rb:21:in `<main>'
    10: from /Users/rmoriz/.asdf/installs/ruby/2.5.0/lib/ruby/gems/2.5.0/gems/jenkins_api_client-1.5.3/lib/jenkins_api_client/job.rb:865:in `build'
     9: from /Users/rmoriz/.asdf/installs/ruby/2.5.0/lib/ruby/gems/2.5.0/gems/jenkins_api_client-1.5.3/lib/jenkins_api_client/job.rb:899:in `get_build_id_from_queue'
     8: from /Users/rmoriz/.asdf/installs/ruby/2.5.0/lib/ruby/2.5.0/timeout.rb:108:in `timeout'
     7: from /Users/rmoriz/.asdf/installs/ruby/2.5.0/lib/ruby/2.5.0/timeout.rb:33:in `catch'
     6: from /Users/rmoriz/.asdf/installs/ruby/2.5.0/lib/ruby/2.5.0/timeout.rb:33:in `catch'
     5: from /Users/rmoriz/.asdf/installs/ruby/2.5.0/lib/ruby/2.5.0/timeout.rb:33:in `block in catch'
     4: from /Users/rmoriz/.asdf/installs/ruby/2.5.0/lib/ruby/2.5.0/timeout.rb:93:in `block in timeout'
     3: from /Users/rmoriz/.asdf/installs/ruby/2.5.0/lib/ruby/gems/2.5.0/gems/jenkins_api_client-1.5.3/lib/jenkins_api_client/job.rb:906:in `block in get_build_id_from_queue'
     2: from /Users/rmoriz/.asdf/installs/ruby/2.5.0/lib/ruby/gems/2.5.0/gems/jenkins_api_client-1.5.3/lib/jenkins_api_client/build_queue.rb:110:in `get_item_by_id'
     1: from /Users/rmoriz/.asdf/installs/ruby/2.5.0/lib/ruby/gems/2.5.0/gems/jenkins_api_client-1.5.3/lib/jenkins_api_client/client.rb:377:in `api_get_request'

Example

require 'jenkins_api_client'

jenkins_client = JenkinsApi::Client.new(
  server_url: 'https://jenkins.example.com',
  username: 'user',
  password: 'pass',
  log_level: 0,
  ssl: true
)

opts = {
  'build_start_timeout' => 10,
  'completion_proc' => lambda do |build_number, _|
    puts "build_number: #{build_number}"
  end
}

jenkins_client.job.build("test-project", "", opts)

Workaround Hack

...
JenkinsApi::Client::Job.send(:remove_const, 'JENKINS_QUEUE_ID_SUPPORT_VERSION')
JenkinsApi::Client::Job::JENKINS_QUEUE_ID_SUPPORT_VERSION = '99.9'
jenkins_client.job.build("test-project", "", opts)
QZ1220 commented 3 years ago

check this: https://groups.google.com/g/jenkinsci-users/c/5X2JTSp2aNo