class RoboPigeon::Jenkins::Job
Constants
- DEFAULT_START_TIMEOUT
Attributes
build_opts[RW]
build_timeout[RW]
jid[RW]
logs[RW]
name[RW]
params[RW]
poll_interval[RW]
Public Class Methods
new()
click to toggle source
# File lib/robopigeon/jenkins/job.rb, line 6 def initialize self.build_timeout = 60 * 60 # 60 minutes in seconds self.params = {} self.poll_interval = 10 self.build_opts = { 'build_start_timeout' => DEFAULT_START_TIMEOUT, 'cancel_on_build_start_timeout' => true } end
Public Instance Methods
build_and_watch!()
click to toggle source
# File lib/robopigeon/jenkins/job.rb, line 28 def build_and_watch! self.jid = client.job.build(name, params.to_h, build_opts) puts "Created jenkins job: #{job_url(jid)}" watch_build end
client()
click to toggle source
# File lib/robopigeon/jenkins/job.rb, line 16 def client RoboPigeon::Jenkins::Client.client end
job_url(jid)
click to toggle source
# File lib/robopigeon/jenkins/job.rb, line 24 def job_url(jid) "#{RoboPigeon::Jenkins::Client.url}/jobs/#{name}/#{jid}" end
start_timeout=(timeout)
click to toggle source
# File lib/robopigeon/jenkins/job.rb, line 20 def start_timeout=(timeout) build_opts['build_start_timeout'] = timeout end
Private Instance Methods
job_complete?(jid)
click to toggle source
# File lib/robopigeon/jenkins/job.rb, line 53 def job_complete?(jid) return true if client.job.get_build_details(name, jid)['result'] == 'SUCCESS' return true if client.job.get_build_details(name, jid)['result'] == 'FAILURE' false end
job_success?(jid)
click to toggle source
# File lib/robopigeon/jenkins/job.rb, line 65 def job_success?(jid) client.job.get_build_details(name, jid)['result'] == 'SUCCESS' end
output_logs(jid)
click to toggle source
# File lib/robopigeon/jenkins/job.rb, line 60 def output_logs(jid) self.logs = client.api_get_request("/job/#{name}/#{jid}/consoleText", nil, '') puts logs end
watch_build(iteration=0)
click to toggle source
# File lib/robopigeon/jenkins/job.rb, line 37 def watch_build(iteration=0) if iteration * poll_interval > build_timeout output_logs(jid) raise Timeout::Error, "Build timed out, see logs or look at #{job_url(jid)}" unless job_success?(jid) elsif job_complete?(jid) output_logs(jid) raise RoboPigeon::Jenkins::Failure, "Build did not complete successfully, see logs or look at #{job_url(jid)}" unless job_success?(jid) return end puts "Job not yet complete, Run time: #{(iteration * poll_interval / 60.0).round(2)} minutes" sleep poll_interval watch_build(iteration + 1) end