class JenkinsCentaur::Centaur

Public Class Methods

new(resource) click to toggle source
# File lib/jenkins-centaur/centaur.rb, line 8
def initialize(resource)
  raise "File '#{resource}' doesn't exist!" unless File.exist?(resource)

  @config = YAML::load(File.open(resource))
  raise "Invalid yaml file: '#{resource}'" unless @config

  @client = JenkinsApi::Client.new(server_url: @config['server_url'])
  @client.logger = Logger.new('jenkins_api_client.log', 10, 10_024_000)
end

Public Instance Methods

start() click to toggle source
# File lib/jenkins-centaur/centaur.rb, line 18
def start
  println "Started at: #{Time.now}."

  build_info = Concurrent::Array.new
  threads = []
  @config['jobs'].each do |job|
    threads << Thread.new do
      println "Creating build for job #{job['name']} with parameters: #{job['params']}"

      params = {}
      job['params'].each do |key, value|
        if value.include?('ENV')
          params[key] = eval(value)
        else
          params[key] = value
        end
      end

      build_num = @client.job.build(job['name'], params, 'build_start_timeout' => 300, 'poll_interval' => 10)
      println "Created build #{build_num} for job #{job['name']} with parameters: #{job['params']}"

      build_info << {build_num: build_num, job_name: job['name']}
    end
  end

  threads.each(&:join)

  overall_status = 0
  build_info.each do |build|
    build_num = build[:build_num]
    job_name = build[:job_name]

    build_details = nil
    loop do
      println "Checking build #{build_num}..."

      begin
        Timeout.timeout(10) do
          build_details = @client.job.get_build_details(job_name, build_num)
        end
      rescue StandardError => e
        println "Exception occured while trying to check the result, will check again soon. #{e.message}"
        sleep 5
      end

      break if build_details['result']
      sleep(2)
    end

    println "Results for build #{build_num}: #{build_details['result']}. See more at: #{build_details['url']}"

    overall_status = 1 if build_details['result'] != 'SUCCESS'
  end

  println "All done at #{Time.now}."

  overall_status
end

Private Instance Methods

println(text) click to toggle source
# File lib/jenkins-centaur/centaur.rb, line 79
def println(text)
  puts text
  STDOUT.flush
end