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